У меня есть объект (так называемый «ассоциированный массив» - также известный как простой объект JavaScript):
obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"
Я хочу перебрать obj
использование CoffeeScript следующим образом:
# CS
for elem in obj
Бу код CS выше компилируется в JS:
// JS
for (i = 0, len = obj.length; i < len; i++)
что не подходит в этом случае.
Путь JavaScript был бы, for(var key in obj)
но теперь я задаюсь вопросом: как я могу сделать это в CoffeeScript?
javascript
coffeescript
jhchen
источник
источник
length
свойством, которое просто ссылается на самый высокий числовой индекс (плюс 1). То, что вы хотите, это просто «объект»obj = {}
. Массивы - это объекты, но нет причин использовать их в вашем примере.Ответы:
Использование
for x,y of L
. Соответствующая документация .Выходы
Вы также можете рассмотреть вариант,
for own k,v of ages
упомянутый Аароном Дюфуром в комментариях. Это добавляет проверку для исключения свойств, унаследованных от прототипа, что, вероятно, не является проблемой в этом примере, но может быть, если вы строите поверх других вещей.источник
of
компилируется в JavaScriptin
. Это общая путаница, ноin
использование с массивами невероятно полезно. Я подробно об этом говорю в книге CoffeeScript .arr
какarr = []
, вы должны использоватьarr = {}
. В Javascript (и Coffeescript) массивы имеют числовые индексы. Объекты ведут себя как ассоциативные массивы / дикты.for own key, value of obj
он ближе к тому, что ищет OP.Вы инициализируете массив, но затем используете его как объект (в js нет «ассоциативного массива»).
Используйте синтаксис для перебора объектов (что-то вроде):
источник
[]
вместо{}
этого.Сокращенная версия, использующая понимание массива, которая может использоваться как однострочный цикл.
Массивом понимания являются:
источник
согласно вашему соглашению arr - это массив, но «foo» - это свойство этого массива, а не индексированное значение. Если вы хотите сохранить ваши данные в индексированных значениях массива, вы должны написать:
или если вы хотите ассоциативный массив, просто используйте объект:
если вы хотите перебрать arr1:
возвращает:
и зациклить на arr2: "для значения в массиве"
который возвращает:
источник