2014-07-13 3 views
0

내 목적은 다음과 같습니다필터 배열과 같은 개체

aryControlDef = { 
    'item1' : ['a','b','c'], 
    'item2' : ['x','y','z']  
}; 

아직 내가이 얻을이

var sAtt = 'z'; 
var vControlDef = Array.prototype.filter.call(aryControlDef, function(value) {return value[2] == sAtt}); 

호출 할 때 : 나는 함께 할 알고

vControlDef = [] 

을 이 루프는 올바른 결과를 얻으므로 키가있는 배열 모양의 객체가 반복됩니다.

for(var i in aryControlDef){ 
    if(aryControlDef[i][2]=='z'){ 
    vControlDef[aryControlDef[i][0]] = aryControlDef[i]; 
    }; 
}; 

내가하는 것은 sAtt와 일치하는 속성을 가진 키가 들어있는 객체를 반환하는 방법입니다.

내가 알아낼 수없는 것은 'for ... each'루프에서 가능한 것과 같은 방식으로 콜백 함수에서 키를 반복하는 방법이며 Google은 나를위한 어떤 결과도 찾지 못했습니다. 이 경우 사용하십시오. TIA에 대한 제안 :

- ps. 내가

외부 라이브러리를 의미하는 Google 애플리케이션 스크립트에서이 일을하지 않음 (DOM)하고 언급하는 것을 잊었다 - 솔루션 1 제안

var vControlDef = Object.keys(aryControlDef).filter(function(key) { 
    return aryControlDef[key][2] == sAtt; 
}); 

가 아닌 Descript를 Google 서버 오류 "우리는 '을 제기 죄송합니다. 서버 오류가 발생했습니다. 잠시 기다렸다가 다시 시도하십시오. "

+0

에서 얻을 것이라고 생각 것과 유사해야한다? – Whymarrh

+0

배열이 아닌 다른 것에 배열 메서드를 호출하려고합니다. "배열과 유사한 객체"조차도 아닙니다. 배열과 같은 특징이없는 객체 일뿐입니다. 물론 작동하지 않습니다. Array의 메소드를 사용하여 여기에 도움을 줄 수는 없습니다. 이미 제공 한 것과 같은 간단한 루프를 사용해야 할 것입니다. – meagar

+1

개체가 "배열 형 개체"가 아닙니다. 자바 스크립트에서 "배열과 같은"의미는 객체가 수치 적으로 색인화 된 속성을 가져야한다는 것을 의미하며, 상속을 색인에 제공하는'.length' 속성을 의미합니다. – Pointy

답변

0

도움이 될 수 있습니다.

var aryControlDef = { 
    'item1' : ['a','b','c'], 
    'item2' : ['x','y','z']  
}; 

var vControlDef = []; 

for (key in aryControlDef) { 
    if (aryControlDef.hasOwnProperty(key)) { 
     // So now the possible value of 
     // key is 'item1'/'item2' 
     // aryControlDef[key] is ['a','b','c']/['x','y','z'] 

     if (aryControlDef[key][2] == 'z') { 
      vControlDef.push(aryControlDef[key]); 
     } 
    } 
} 

vControlDef의 결과는 당신이 "콜백 함수에서 키를 반복"무엇을 의미합니까 당신이

var vControlDef = Array.prototype.filter.call(aryControlDef, function(value) { 
    return value[2] == 'z' 
}); 
+0

하지만 첫 번째 게시물에 표시된 루프 솔루션이 이미 있습니다. 사용하고 싶습니다. 네이티브 메소드 :) – Tim

관련 문제