다음과 같은 중첩 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' } ]