Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

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

หากมีอ็อบเจกต์ใดๆ อยู่ ฟังก์ชันควรส่งคืนอาร์เรย์ของอ็อบเจ็กต์ดังกล่าวทั้งหมด

เราจะใช้แนวทางต่อไปนี้เพื่อแก้ปัญหานี้ -

  • หากรายการที่ค้นหาเป็นเท็จหรือไม่ใช่วัตถุ เราจะส่งคืน
  • หากให้คีย์และค่าตรงกัน เราจะเพิ่มออบเจกต์จริงไปยังชุดผลลัพธ์
  • เราได้รับคีย์และวนซ้ำคุณสมบัติและเรียกใช้ฟังก์ชันอีกครั้ง

ในที่สุด เราก็ส่งคืนอาร์เรย์ด้วยวัตถุที่รวบรวมไว้

ตัวอย่าง

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