ahs*_*ele 2 javascript recursion json node.js
我正在使用一个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"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码遍历上述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);
Run Code Online (Sandbox Code Playgroud)
上面的内容如下:
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'
]
Run Code Online (Sandbox Code Playgroud)
当我的代码工作时,我不相信自己是最有效或最佳的方法。有没有更好的方法来查找该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;
});
Run Code Online (Sandbox Code Playgroud)
请参见reviver上JSON.parse方法。
| 归档时间: |
|
| 查看次数: |
13387 次 |
| 最近记录: |