📜  如何使用 JavaScript 过滤嵌套的 JSON 对象以返回特定值?(1)

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

如何使用 JavaScript 过滤嵌套的 JSON 对象以返回特定值?

一个 JSON 对象可能会包含许多层嵌套,当我们需要获取其中特定的值时,可以使用 JavaScript 过滤嵌套的 JSON 对象来实现。

代码示例

以下是一个示例 JSON 对象:

{
  "name": "小明",
  "age": "18",
  "school": {
    "name": "清华大学",
    "address": "北京市海淀区"
  },
  "friends": [
    {
      "name": "小红",
      "age": "17"
    },
    {
      "name": "小刚",
      "age": "19"
    }
  ]
}

假设我们需要获取小明的学校地址,可以使用如下代码:

const obj = {
  // JSON 对象
};

const schoolAddress = obj.school.address;
console.log(schoolAddress); // "北京市海淀区"

在以上示例中,我们直接通过访问嵌套的对象属性来获取了特定的值,这种方法适用于 JSON 对象较为简单的情况。

当 JSON 对象较为复杂,或需要查询的值存在于数组中时,我们需要使用 JavaScript 过滤嵌套的 JSON 对象。

以下是一个较为复杂的 JSON 对象:

{
  "name": "小明",
  "age": "18",
  "schools": [
    {
      "name": "清华大学",
      "address": "北京市海淀区"
    },
    {
      "name": "北京大学",
      "address": "北京市海淀区"
    }
  ],
  "friends": [
    {
      "name": "小红",
      "age": "17",
      "schools": [
        {
          "name": "北京大学",
          "address": "北京市海淀区"
        },
        {
          "name": "中国人民大学",
          "address": "北京市海淀区"
        }
      ]
    },
    {
      "name": "小刚",
      "age": "19",
      "schools": [
        {
          "name": "清华大学",
          "address": "北京市海淀区"
        },
        {
          "name": "中国人民大学",
          "address": "北京市海淀区"
        }
      ]
    }
  ]
}

假设我们需要获取所有学校的地址,可以使用如下代码:

const obj = {
  // JSON 对象
};

const allSchoolAddresses = filterObject(obj, 'address');
console.log(allSchoolAddresses); // ["北京市海淀区", "北京市海淀区", "北京市海淀区", "北京市海淀区"]

在以上代码示例中,我们使用了 filterObject 函数来实现过滤嵌套的 JSON 对象,其代码如下:

function filterObject(obj, key) {
  // 初始化结果数组
  let result = [];

  // 遍历 JSON 对象
  for (let i in obj) {
    // 递归搜索子对象
    if (typeof obj[i] === 'object') {
      result = result.concat(filterObject(obj[i], key));
    } else {
      // 找到特定键值
      if (i === key) {
        result.push(obj[i]);
      }
    }
  }

  return result;
}

filterObject 函数中,我们使用了递归的方式来遍历 JSON 对象中的所有属性,当找到特定的键值时,将其值保存到结果数组中。

总结

当需要获取嵌套的 JSON 对象中的特定值时,可以使用 JavaScript 过滤嵌套的 JSON 对象来实现。在过滤时,可以考虑使用递归的方式来遍历 JSON 对象中的所有属性,并将找到的特定键值保存到结果数组中。