Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

딥서치 JSON 객체 자바스크립트

<시간/>

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