홈>
첫 번째 수준 키를 몰라도 조건을 충족하는 중첩 된 개체의 모든 2 단계 수준 요소에 액세스하고 싶습니다.
예 :
myObject = {
foo: {
element_one : 1,
element_two : 1,
...
},
bar: {
element_one : 3,
element_two : 4,
...
},
buzz: {
element_one : 99,
element_two : 100,
...
},
...
}
위의 예에서 나는
myObject.<any_key>.element_one === some_number
가있는 모든 1 레벨 키를 효율적으로 잡을 수 있기를 원했습니다.
.
한 가지 확실한 해결책은 목록을 반복하고 각 요소를 확인하는 것이지만이 함수를 여러 번 호출하면 계산 비용이 많이 듭니다. 백업으로 키 = element_one 인 새 객체를 만들어 참조로 사용할 수 있습니다.
그러나 이것을 처리하는 더 좋은 방법이 있는지 궁금합니다.
수정 : 요소의 최대 값에 대한 사전 지식이 없습니다.
- 답변 # 1
- 답변 # 2
Object.keys
를 사용할 수 있습니다 객체의 첫 번째 레벨 키 배열을 가져 와서Array.prototype.filter
를 사용하십시오. 첫 번째 레벨 키를 필터링하려면 두 번째 레벨 키에 지정된 번호가 있습니다 :myObject = { foo: { element_one : 1, element_two : 1 }, bar: { element_one : 3, element_two : 4 }, buzz: { element_one : 99, element_two : 100 } } console.log(Object.keys(myObject).filter(key => myObject[key].element_one === 99));
- 답변 # 3
그래서 두 가지 솔루션을 제공 할 것입니다.
1)일치하는 키 배열
2)일치하는 키 (및 관련 값)가 포함 된
const myObject = { foo: { element_one : 1, element_two : 1, }, bar: { element_one : 3, element_two : 4, }, dogs: { element_one : 1, element_two : 4, }, buzz: { element_one : 1, element_two : 100, }, } const matchingKeys = Object.keys(myObject).filter(key => { return myObject[key].element_one === 1 }) // 1st solution: if you want the matching keys only console.log(matchingKeys) const objectWithMatchingKeys = Object.keys(myObject).reduce((acc, val) => { if (myObject[val].element_one === 1) acc[val] = myObject[val] return acc }, {}) // 2nd solution: if you want the object WITH matching keys console.log(objectWithMatchingKeys)
도우미 기능에서 함수 매개 변수로 하드 코딩 된 키 (예 : element_one)를 교체하여 위의 솔루션을 확장 가능/재사용 가능하게 만들 수 있습니다!
- 답변 # 4
응답 해 주셔서 감사합니다. 요소의 최소/최대 값에 대한 통제력이나 지식이 없다고 생각하고 그것들이 반드시 순서대로있는 것은 아닙니다. Bergi와 RK_oo7의 의견은 정확합니다. 가장 효율적인 솔루션은 목록을 한 번 반복하고 미래의 요소 값을 캐시하는 것입니다.
이것과 같은 것 :
var elementIndex = {}; Object.entries(myObject).forEach(([key, val]) => { if (val.element_one in elementIndex) { elementIndex[val.element_one].push(key); } else { elementIndex[val.element_one] = [key]; } });
작동하는 것 :