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

위의 코드는 작동하지만, coffeescript는 추악하고 불완전합니다. 우선, index var은 완전히 사용되지 않고, 단지 거기에서 연관 배열과 인덱스가 아닌 결과로 dataPoint var에 액세스 할 수 있습니다. 또한 그 세 줄! coffeescript 루프를 사용하면 배열은 루프에서 한 줄 씩 쓸 수 있습니다.연관 배열을 통한 coffeescript 루프

나는 이런 일이 가능 상상 :

magnitudeArray = for dataPoint of chartData when dataPoint.magnitude? 

당신은이 일의 청소기 coffeescriptier의 방법을 알고 있습니까?

+2

당신은 알고 너무 : 그런 건에서 연관 배열로이 없다 Coffeescript/Javascript. 당신은 물건이 있습니다. – Paulpro

+1

자바 스크립트에서 매우 중요한 것은 객체입니다. 나는 그것을 연관 배열로 사용하고있다. 프로토 타입과 메서드가 없습니다. 어떻게 표현 하시겠습니까? – Fresheyeball

답변

1

예,이 경우 array comprehension을 사용할 수 있지만 chartData 키의 변수를 사용해야합니다.이 키는 객체라고 가정합니다. 당신은 (이 커피 스크립트의 일반적인 관행 인 경우 모르겠어요하지만) 사용하지 않는 변수를 표시하기 위해 _를 사용할 수 있습니다

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

Example at coffeescript.org합니다.

+0

예제를 살펴 보았지만 괄호가있는 예제를 찾지 못했습니다. 이것은 coffeescript를 화려하게 만드는 표현의 일종입니다. 고맙습니다. – Fresheyeball

+0

죄송합니다. 링크 예제에 오류가 있습니다. coffeescript.org에는 'countdown = (num for num [10..1])'과 같은 이해력이있는 배열을 생성하는 예제가 몇 가지 있지만, 그렇게 큰 차이는 없다는 것에 동의합니다. [10..1]에서 countdown = num의 num을 수행합니다. 여기서'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

나는 이것이 옳다고 생각하지 않습니다. OP의 의도라고 믿는'chartData = {a : {magnitude : 8}, b : {stuff : 10}, c : {magnitude : 10}}'로 시도해보십시오. 너의 것은'chartData = {{크기 : 8}, {stuff : 10}, {magnitude : 10} '와 같은 형태로 작동한다. –

+0

사실, 차트 데이터를 객체 대신 배열로 가정했다. 무시 당하고있었습니다. 그러나 OP는 그것을 객체라고 생각하는 '연관 배열'이라고 부릅니다. 편집 됨. – nicolaskruchten

관련 문제