2012-08-24 3 views
4

사용자가 특정 그룹의 구성원인지 확인하기 위해 항목 배열 (Tridion User Groups)을 반복하는 간단한 Javascript가 있습니다.배열 형식이 배열 값으로 선택되었습니다.

난 쉽게 아래와 같이 문제를 해결 코드 (&& extensionGroup !== 'true' 참조) 할 수 있지만 나는 isArray = true 배열에 로 계산됩니다 이유를 이해하려면 - 어떤 아이디어? 아래

의 스크린 샷은 값 extensionGroups 따라서

var extensionGroups = ["NotEvenARealGroup", "Author", "ExampleGroupAfterOneUserIsActuallyIn"]; 

을 설정하지만 4 번째 값으로 isArray 값을 반환되었음을 보여?

조금 선명한 이미지를 표시하도록 업데이트

Firebug - objects

Firebug - code 당신은 배열을 반복하는 for in을 사용하고

+1

아니야. 그것은 객체의 속성입니다. – Ryan

+2

더 나은 질문은 왜 누군가가'isArray'를 Array 프로토 타입에 추가 했는가입니다. 항상 그렇지 않을까요? – jbabey

+0

lol @jbabey 좋은 질문입니다. –

답변

7

; 그러지 마. for (또는 forEach)를 사용 : for in 자바 스크립트에서 객체의 속성을 반복하는 데 사용되기 때문에이 작업이 실패

for(var i = 0; i < extensionGroups.length; i++) { 
    var extensionGroup = extensionGroups[i]; 
    // ... 
} 

이유입니다. 이 방법으로 배열을 반복하면이 속성이나 length과 같이 할당 된 다른 것을 얻을 수 있습니다. 당신이 Array#forEach을 사용할 수 있다면

그리고, 여기 아마 가장 적절한이다 :

extensionGroups.forEach(function(extensionGroup) { 
    // ... 
}); 
+0

Minitech에게 감사드립니다. 코드를 쓴 다음 방금 디버깅 할 때 눈에 띄지 않게 보였습니다. 신속한 대응을위한 건배. –

1

For..in, 기술적으로 말하면, 값을 반복하지 않습니다. 속성 이름을 반복합니다. 배열에서 값은 속성 아래에 있습니다. 따라서 for..in으로 반복 할 때 그런 일이 일어나는 것처럼 펑키 한 내용을 얻을 수 있습니다.

다음 점을 강조하는 내용 : for..in을 사용하지 마십시오. 배열에 사용하지 마십시오. 실제로 아무 것도 사용하지 마십시오. Ok - 어쩌면 조금 지나치다. 어때요? for..in을 사용해야 할 필요가 있다고 생각하면하기 전에 정당성이 있는지 생각해보십시오.

+0

* anything *에 사용하지 마십시오? 나는 그것이 사실 약간의 기초를 필요로한다고 생각합니다.'for for'는 의도 된 것을 사용했을 때 우수하고 객체의 속성을 반복합니다. – Ryan

+0

자신을 때렸다 고 생각해보십시오. 나는 항상 minitech 위에서 언급 한 방법을 사용했지만 어떤 이유로 나무가 보이지 않아 나무가 보이지 않았습니다! 이제 고마워. :) –

+0

@minitech 내 말은 .. 내 생각 엔. 하지만 얼마나 자주 javascript의 모든 객체 속성을 반복해야합니까?나도 몰라 - 아마 그냥 프로그래밍 스타일,하지만 js 프로그래밍의 몇 년 동안 나는 한번 사용했는지 모르겠다. –