다음과 같은 중첩 JSON 객체가 있다고 가정합니다. -
const obj = {
id: 1,
title: 'hello world',
child: {
id: null,
title: 'foobar',
child: {
id: null,
title: 'i should be in results array '
}
},
foo: {
id: null,
title: 'i should be in results array too!' },
deep: [
{
id: null,
value: 'yo'
}, {
id: null,
value: 'yo2'
}
]
}; 첫 번째 인수로 하나의 객체, 두 번째 인수로 키 문자열, 세 번째 인수로 값 문자열을 취하는 JavaScript 함수를 작성해야 합니다. 그런 다음 함수는 JSON 개체에서 지정된 키 값 쌍을 확인해야 합니다.
객체가 존재하는 경우 함수는 그러한 모든 객체의 배열을 반환해야 합니다.
우리는 이 문제를 해결하기 위해 다음 접근 방식을 사용할 것입니다 -
- 검색된 항목이 false이거나 객체가 아닌 경우 반환합니다.
- 주어진 키와 값이 일치하면 결과 집합에 실제 개체를 추가합니다.
- 키를 가져와 속성을 반복하고 함수를 다시 호출합니다.
마지막으로 수집된 객체가 포함된 배열을 반환합니다.
예시
const obj = {
id: 1,
title: 'hello world',
child: {
id: null,
title: 'foobar',
child: {
id: null,
title: 'i should be in results array '
}
},
foo: {
id: null,
title: 'i should be in results array too!' },
deep: [
{
id: null, value: 'yo'
}, {
id: null, value: 'yo2'
}
]
};
const findObject = (obj = {}, key, value) => {
const result = [];
const recursiveSearch = (obj = {}) => {
if (!obj || typeof obj !== 'object') { return;
};
if (obj[key] === value){
result.push(obj);
};
Object.keys(obj).forEach(function (k) {
recursiveSearch(obj[k]);
});
} recursiveSearch(obj);
return result;
} console.log(findObject(obj, 'id', null)); 출력
[
{
id: null,
title: 'foobar',
child: {
id: null, title: 'i should be in results array '
}
},
{
id: null, title: 'i should be in results array '
}, {
id: null, title: 'i should be in results array too!'
}, {
id: null, value: 'yo'
}, { id: null, value: 'yo2'
}
]