2016-09-12 2 views
1

내 코드는 루프 :은 객체와 객체 반환 키 배열을 통해

let filters = [ 
    {name: "MAKE", values: 
    [ 
     { 
     Volkswagen: {active: true, make: "Volkswagen"}, 
     Skoda: {active: true, make: "Skoda"} 
     } 
    ] 
    } 
] 

function getFilterValues(){ 
    return filters.filter(f => { 
    if(f.name == "MAKE"){ 
     return f.values.filter(i => { 
     Object.keys(i).map(key => { 
      return key; 
     }); 
     }); 
    } 
    }); 
} 

var div = document.getElementById('output'); 
div.innerHTML = getFilterValues(); 

내가 객체 키를 얻기 위해 필터를 통해 루프합니다.

따라서 내가 원하는 결과는 Volkswagen, Skoda입니다. 하지만 내 함수 getFilterValues는 내가 원하는 것을 반환하지 않습니다.

여기에 jsfiddle입니다.

어떤 조언이 필요합니까?

+0

은'지도'의 정말 아무것도하지 않고, 당신이'filter'에 아무것도 반환하지 않습니다? – adeneo

+0

기본 배열 기능이 작동하는 방식, 아무도 당신을 도울 수있는 방법을 이해하지 못하셨습니까? – degr

+2

개체/키 파트없이 데이터 구조를 좀 더 반복 가능한 스타일로 변경하는 것이 좋습니다. –

답변

1

주된 문제는 필터 함수이다. 필터를 사용하면 요소가 결과 코드에 포함되어야하는지 여부를 true/false로 반환하므로 map이 필요합니다. https://www.diffchecker.com/CX6hOoxo

이 작동 :이 DIFF을 확인 https://jsfiddle.net/o93Lm0rc/101/

let filters = [ 
    {name: "MAKE", values: 
    [ 
     { 
      Volkswagen: {active: true, make: "Volkswagen"}, 
      Skoda: {active: true, make: "Skoda"} 
     } 
    ] 
    } 
] 

function getFilterValues(){ 
    return filters.map(f => { 
     if(f.name == "MAKE"){ 
      return f.values.map(i => { 
       return Object.keys(i).map(key => { 
        return key; 
       }); 
      }); 
     } 
    }); 
} 


var div = document.getElementById('output'); 

div.innerHTML = getFilterValues(); 
+1

물론. 열쇠를 반납하는 걸 잊었 어. 그러나 @adeneo 솔루션은 훨씬 깨끗합니다. 감사. – Boky

1

Object.keys()을 사용하면 키 목록을 얻을 수 있습니다.

var filters = [{ 
 
    name: "MAKE", 
 
    values: [{ 
 
    Volkswagen: { 
 
     active: true, 
 
     make: "Volkswagen" 
 
    }, 
 
    Skoda: { 
 
     active: true, 
 
     make: "Skoda" 
 
    } 
 
    }] 
 
}]; 
 

 
for (i = 0; i < filters.length; i++) { 
 
    if (typeof filters[i].values == "object") { 
 
    console.log(Object.keys(filters[i].values[0])); 
 
    } 
 
}

관련 문제