📅  最后修改于: 2023-12-03 15:08:20.810000             🧑  作者: Mango
一个 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 对象中的所有属性,并将找到的特定键值保存到结果数组中。