Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tìm kiếm sâu đối tượng JSON trong JavaScript

Giả sử chúng ta có đối tượng JSON lồng nhau sau:

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' 
    } 
  ] 
};

Chúng ta cần viết hàm JavaScript nhận vào đối tượng này làm đối số đầu tiên, chuỗi khóa làm đối số thứ hai và chuỗi giá trị làm đối số thứ ba. Hàm kiểm tra cặp khóa-giá trị cho trước trong đối tượng JSON.

Nếu tồn tại đối tượng nào, hàm trả về mảng tất cả các đối tượng đó.

Cách tiếp cận:

  • Nếu mục tìm kiếm là false hoặc không phải đối tượng, trả về
  • Nếu khóa và giá trị khớp, thêm đối tượng thực tế vào tập kết quả
  • Lấy các khóa và lặp qua thuộc tính, gọi hàm lại

Cuối cùng, trả về mảng với các đối tượng thu thập được.

Ví dụ

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));

Kết quả

[ 
  { 
    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' } 
]