📜  查找不同级别 JSON 中的所有对象 - Javascript (1)

📅  最后修改于: 2023-12-03 15:26:36.095000             🧑  作者: Mango

查找不同级别 JSON 中的所有对象 - Javascript

在处理 JSON 数据时,有时可能需要逐级查找所有包含某个属性的对象。本文将介绍如何使用 JavaScript 来查找不同级别 JSON 中的所有对象。

利用递归实现多级查找

首先需要了解递归的原理。递归是一种函数调用自身的技巧。在查找 JSON 数据时,可以编写一个递归函数来实现多级查找。

function findObjectsWithKey(data, key) {
  let objArray = [];
  const {hasOwnProperty} = Object.prototype;
  function searchObj(obj, innerKey) {
    if (hasOwnProperty.call(obj, innerKey)) {
      objArray.push(obj);
    }
    // 递归搜索子对象
    for (let i in obj) {
      if (obj.hasOwnProperty(i) && typeof obj[i] === 'object') {
        searchObj(obj[i], innerKey);
      }
    }
  }
  searchObj(data, key);
  return objArray;
}

代码中,findObjectsWithKey 函数接受两个参数,分别是要搜索的 JSON 数据和要查找的属性名。在函数体内,定义了一个局部空数组 objArray,用于存储搜索结果。

函数内部定义了一个递归函数 searchObj。如果当前对象中包含要查找的属性,则将该对象存入 objArray 数组中。然后,如果该对象还有子对象,则继续递归搜索。

最后,函数返回搜索结果数组。

示例

接下来,我们来看一下使用上述函数的示例。假设现在有一个多级 JSON 数据,要查找其中包含属性名为 name 的所有对象。

const data = {
  id: 1,
  name: 'Bob',
  address: {
    city: 'New York',
    country: 'USA',
    office: {
      room: '1001',
      desk: [
        {id: 1, type: 'wooden'},
        {id: 2, type: 'metal'}
      ]
    }
  },
  contact: [
    {type: 'email', value: 'bob@example.com'},
    {type: 'phone', value: '123-456-7890'}
  ]
};

调用 findObjectsWithKey(data, 'name') 函数,返回结果数组如下所示。

| 序号 | 对象 |
| ---- | ---- |
| 1    | { id: 1, name: 'Bob', ... } |
| 2    | { city: 'New York', country: 'USA', ... } |
| 3    | { room: '1001', desk: [...] } |
| 4    | { id: 1, type: 'wooden' } |
| 5    | { id: 2, type: 'metal' } |
总结

以上就是在 JavaScript 中查找多级 JSON 数据中的所有对象的方法。使用递归函数可以方便地遍历 JSON 数据,实现多层级查找。