📅  最后修改于: 2023-12-03 15:26:36.095000             🧑  作者: Mango
在处理 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 数据,实现多层级查找。