gpt4 book ai didi

javascript - 如何使用 asnyc.js 迭代嵌套 JSON 值

转载 作者:行者123 更新时间:2023-12-02 17:36:59 24 4
gpt4 key购买 nike

我对 nodeJS/Javascript 的异步特性(Python 背景)相对较新,并试图弄清楚如何单步执行嵌套的 JSON 对象,使用 asnyc.js 提取它的值。

我遇到了这个片段,How to navigate in nested JSON .

function recursiveGetProperty(obj, lookup, callback) {
for (property in obj) {
if (property == lookup) {
callback(obj[property]);
} else if (obj[property] instanceof Object) {
recursiveGetProperty(obj[property], lookup, callback);
}
}
}

这与示例对象 foo 配合得很好。

var foo = {
'key_1' : 'val1',
'key_2': {
'key_3': 'val3',
'key_4': 'val4'
}
}

recursiveGetProperty(foo, 'key_1', function(obj) {
console.log(obj);
});

返回“val1”

recursiveGetProperty(foo, 'key_3', function(obj) {
console.log(obj);
});

返回“val3”

这正是我所需要的,但是当我通过迭代为其提供关键值时:

var keys = ['val1', 'val3'];

for (var keys in keys) {
recursiveGetProperty(foo, keys, function(obj) {
console.log(obj);
});
}

没有任何内容记录到控制台。所以我写了一个日志函数:

function log(obj) {
console.log(obj);
}

并尝试过:

for (var key in keys) {
recursiveGetProperty(foo, keys, log(obj));
}

但我得到 ReferenceError: obj is not Defined。

有人告诉我在 for 循环内执行回调不是一个好主意,我不太清楚为什么,所以我研究了 async.js。这似乎是我想要的正确解决方案,但我不知道如何去做。

使用 async.js,我想构建一系列 recursiveGetProperty 函数,将它们存储在数组中,然后异步执行这些调用,但我对如何解决该问题感到困惑。

我最终想要的是这样的:

async.each(['key_1', 'key_2', 'key_3'], recursiveGet(key) {
doSomethingWithData();
}, function(err) {
doSomethingWhenDone();
});

这将在 ExpressJS 服务器上用于解析 JSON 并随后对其执行某些操作。

任何帮助或建议将不胜感激。

最佳答案

这段代码有错误

var keys = ['val1', 'val3'];
for (var keys in keys) {
recursiveGetProperty(foo, keys, function(obj) {
console.log(obj);
});
}
  • 键数组(第 1 行)被 for 循环的键索引(第 2 行)覆盖。因此,让我们重命名该键。
  • 对于迭代数组,键是数字 (0, 1, ..., n),而不是字符串。您需要使用这些数字作为键的索引
  • 此外,您的 recursiveGetProperty 是通过键而不是值来查找的。

所以代码应该是

var keys = ['key_1', 'key_2'];
for (var key in keys) {
recursiveGetProperty(foo, keys[key], function(obj) {
console.log(obj);
});
}

关于javascript - 如何使用 asnyc.js 迭代嵌套 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22543097/

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