gpt4 book ai didi

javascript - 如何遍历 JSON 对象定位特定属性并将其内容推送到数组?

转载 作者:搜寻专家 更新时间:2023-11-01 00:12:03 25 4
gpt4 key购买 nike

我正在使用一个 JSON 对象,它可以在任何叶子上具有属性 ids。我想遍历对象并找到 ids 属性的所有实例并将每个 id 存储在一个集合中。

模拟的 JSON 对象(ids 属性可能位于更深的属性位置)。

{
"id": "b38a683d-3fb6-408f-9ef6-f4b853ed1193",
"foo": {
"ids": [
{
"id": "bd0bf3bd-d6b9-4706-bfcb-9c867e47b881"
},
{
"id": "d1cc529d-d5d2-4460-b2bb-acf24a7c5999"
},
{
"id": "b68d0c8c-548e-472f-9b01-f25d4b199a71"
}
],
"baz": "super"
},
"bar": {
"ids": [
{
"id": "bd0bf3bd-d6b9-4706-bfcb-9c867e47b881"
},
{
"id": "d1cc529d-d5d2-4460-b2bb-acf24a7c5999"
},
{
"id": "b68d0c8c-548e-472f-9b01-f25d4b199a71"
}
]
}
}

我正在使用下面的代码来遍历上面的 JSON。

var jsonFile = require('./file_test.json'); // the above in my local directory

function traverse(obj, ids) {
for (var prop in obj) {
if (typeof obj[prop] == "object" && obj[prop]) {
if (prop == 'ids') {
for (var i = obj[prop].length - 1; i >= 0; i--) {
ids.push(obj[prop][i]._id);
};
}
traverse(obj[prop], ids);
}
}
}

var ids = new Array();
traverse(jsonFile, ids);

console.log('ids', ids);

以上内容如下:

ids
[
'b68d0c8c-548e-472f-9b01-f25d4b199a71',
'd1cc529d-d5d2-4460-b2bb-acf24a7c5999',
'bd0bf3bd-d6b9-4706-bfcb-9c867e47b881',
'b68d0c8c-548e-472f-9b01-f25d4b199a71',
'd1cc529d-d5d2-4460-b2bb-acf24a7c5999',
'bd0bf3bd-d6b9-4706-bfcb-9c867e47b881'
]

虽然我的代码有效,但我不相信我这样做是最有效或最好的方法。有没有更好的方法来查找 ids 属性的所有实例?也许没有传入数组但返回一个数组?或者使用 ids 数组设置回调?

最佳答案

如果数据实际上是一个 JSON 字符串,而不是一个 JavaScript 对象,你可以有这样的东西:

// assuming `json` is the data string
var ids = [];
var data = JSON.parse(json, function(key, value) {
if (key === "id")
ids.push(value);

return value;
});

参见 JSON.parse 上的 reviver方法。

关于javascript - 如何遍历 JSON 对象定位特定属性并将其内容推送到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15993038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com