[javascript] CoffeeScript에서 객체의 키와 값을 반복하는 방법은 무엇입니까?

객체 (일반 자바 스크립트 객체라고도하는 “연관 배열”)가 있습니다.

obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"

obj다음과 같이 CoffeeScript를 사용하여 반복하고 싶습니다 .

# CS
for elem in obj

bu 위의 CS 코드는 JS로 컴파일됩니다.

// JS
for (i = 0, len = obj.length; i < len; i++)

이 경우에는 적합하지 않습니다.


JavaScript 방식 for(var key in obj)이지만 지금 은 궁금합니다. CoffeeScript에서 어떻게 할 수 있습니까?



답변

사용하십시오 for x,y of L. 관련 문서 .

ages = {}
ages["jim"] = 12
ages["john"] = 7

for k,v of ages
  console.log k + " is " + v

출력

jim is 12
john is 7

for own k,v of ages주석에서 Aaron Dufour가 언급 한 변형을 고려할 수도 있습니다 . 프로토 타입에서 상속 된 속성을 제외하는 검사를 추가합니다.이 예제에서는 문제가되지 않지만 다른 것들을 기반으로 구축하는 경우가 있습니다.


답변

배열을 초기화하고 있지만 객체처럼 사용하고 있습니다 (js에는 “연관 배열”이 없습니다).

객체를 반복 할 때 다음과 같은 구문을 사용하십시오.

for key, val of arr
  console.log key + ': ' + val 


답변

단선 루프로 사용할 수있는 배열 이해를 사용하는 숏 핸드 버전입니다.

console.log index + ": " + elm for index, elm of array

배열 이해 :

“포괄 옵션은 선택적 가드 절과 현재 배열 인덱스의 값으로 for 루프를 대체하고 컴파일합니다. for 루프와 달리 배열 이해는 표현식이며 반환 및 할당 될 수 있습니다.”,
http://coffeescript.org/ # 루프


답변

규칙에 따라 arr은 배열이지만 “foo”는이 배열의 속성이며 인덱스 된 값이 아닙니다. 배열의 인덱스 값을 데이터에 저장하려면 다음과 같이 작성해야합니다.

arr1 = []
arr1[0] = "Bar"
arr1[1] = "Foo"

또는 연관 배열을 원하면 객체를 사용하십시오.

arr2 = {}
arr2["Foo"] = "Bar" // equivalent to arr2.foo="Bar"
arr2["bar"] = "Foo" // equivalent to arr2.bar="Foo"

arr1을 반복하려면 :

str = "values are : "
for val in arr2
  str += val + " |"
console.log key + ': ' + val

반환 :

values are : Bar | Foo |

arr2를 반복 : “배열의 값”

for key, val of arr
  console.log key + ': ' + val

다음을 반환합니다.

Foo : Bar
Bar : Foo


답변