2014-06-22 5 views
7

연관 배열에 에 forEach 루프가 있습니까? "forEach"라고 불렀습니다. 색인 된 배열에서만 작동합니다. 나는이 때, 그러나Lodash forEach 연관 배열

1 
2 
3 

: I 값 [1, 2, 3]와 배열 myArray 있고,

을하고 (Node에) 기능을 실행하는 경우 예를 들어, 내가 예상 결과를 얻을 수 연관 배열로, 그것은 작동하지 않습니다

lodash = require('lodash'); 
myArray = []; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 
lodash.forEach(myArray, function(index) { 
    console.log('7'); 
}); 

당신이 Node, 콜백 기능 D이 실행에서 볼 수 있듯이 배열 요소가 아닌 다른 요소가 포함되어있을 때조차도 화재가 발생하지 않습니다. 그냥 루프를 완전히 건너 뛰는 것 같습니다.

우선, 왜 이런 일이 발생합니까? 둘째로,이 문제에 대해 Lodash에 다른 함수가 포함되어 있습니까? 아니면 그렇지 않은 경우 프로세스에서 원래 배열을 변경하지 않고 forEach 함수를 사용하여이 작업을 수행하는 방법이 있습니까?

답변

5

Lodash은이 목적으로 forOwn입니다. 두 번째 배열에서 수행 할 경우

_.forOwn(myArray, function(index) { 
    console.log(index); 
}); 

을 얻어야합니다.

그러나 여전히 forEach이 첫 번째 기능을 건너 뛰는 것 같지 않지만 "길이"가없는 배열과 관련이있을 수 있습니다. 배열의 길이는 가장 높은 번호의 인덱스입니다. 예를 들어, myOtherArray[999]="myValue"으로 정의 된 배열 myOtherArray은 다른 값이없는 경우에도 길이가 1,000입니다 (배열은 인덱스가 0이므로 1에서 시작하지 않으므로 0부터 시작 함). 즉, 번호가 매겨진 인덱스가 없거나 음수 인덱스 만있는 배열은 length 속성을 갖지 않습니다. Lodash은 배열을 length 속성으로 지정하지 않아야하며 일관성과 성능을 유지하므로 출력이 렌더링되지 않습니다.

6
myArray = []; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 
lodash.forEach(myArray, function(index) { 
    console.log('7'); 
}); 

연관 배열은 Javascript 객체 일 뿐인 키 값 쌍의 집합입니다. 위의 경우 - myArray.length === 0, 실제 배열에 값을 추가하지 않고 배열 객체에 속성을 추가하기 만하면됩니다.

대신 forIn

var myArray = {}; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 

lodash.forIn(myArray, function(value, key) { 
    console.log(key + " : " + value); 
}); 

하거나

var myArray = { 
    valOne : 1, 
    valTwo : 2, 
    valThree : 3 
    }; 

    lodash.forIn(myArray, function(value, key) { 
     console.log(key + " : " + value); 
    }); 

연관 배열로 객체에 대한 자세한을 사용을 통해이 루프처럼 myArray의 초기화 here