2012-06-22 2 views
1
magnitudeArray = [] 
for index, dataPoint of chartData 
    magnitudeArray.push dataPoint.magnitude if dataPoint.magnitude? 

Приведенный выше код работает, но для coffeescript его уродливая и не-coffeescripty. Прежде всего, index var полностью не используется, его просто там, поэтому я могу получить доступ к dataPoint var в качестве результата для ассоциативного массива, а не индекса. Также его три линии! С массивами coffeescript-петель предполагается, что они могут быть записаны с одной строкой, за исключением цикла.coffeescript loop через ассоциативный массив

Я представляю себе что-то, как это возможно:

magnitudeArray = for dataPoint of chartData when dataPoint.magnitude? 

Вы знаете пылесос coffeescriptier способа сделать это?

+2

Только так вы знаете: нет такого понятия, как ассоциативный массив в CoffeeScript/Javascript. У вас есть объект. – Paulpro

+1

Очень хорошо, что в javascript есть объект. Я использую его как ассоциативный массив. Нет прототипов и методов. Как бы вы это сформулировали? – Fresheyeball

ответ

1

Да, вы должны иметь возможность использовать array comprehension в этом случае, хотя вам понадобится использовать переменную для ключей chartData, которую я считаю объектом. Вы можете использовать _ для обозначения неиспользуемых переменного (хотя я не знаю, если это обычная практика в CoffeeScript):

magnitudes = (point.magnitude for _, point of chartData when point.magnitude?) 

Example at coffeescript.org.

+0

Я посмотрел на пример, но не нашел тот, у которого есть круглые скобки, как вы. Это просто выражение, которое делает coffeescript блестящим. Спасибо. – Fresheyeball

+0

Извините, у примера ссылки была ошибка. Есть несколько примеров в coffeescript.org для генерации массивов с пониманием, например 'countdown = (num для num in [10..1])', но я бы согласился, что не так очевидно, что есть большая разница с делая 'countdown = num для num in [10..1]', где 'countdown' в итоге будет просто' 1': P – epidemian

1

Вы можете использовать «Разбирая назначение» уплотнить его вниз немного больше

magnitudes = (magnitude for i, {magnitude} of chartData when magnitude?) 

или даже

magnitudes = (m for i, {magnitude: m} of chartData when m?) 
+0

Я не думаю, что это правильно. Попробуйте это с помощью 'chartData = {a: {величина: 8}, b: {stuff: 10}, c: {величина: 10}}', что, я считаю, является целью OP. Твоя работа с чем-то вроде «chartData = [{величина: 8}, {материал: 10}, {величина: 10}]' –

+0

Действительно, я только что предположил, что 'chartData' был массивом вместо объекта, учитывая, что индекс был проигнорирован. Но OP называет его «ассоциативным массивом», который я воспринимаю как объект. Ред. – nicolaskruchten

Смежные вопросы