gpt4 book ai didi

javascript - 遍历所有节点并在 Javascript 中生成键和值

转载 作者:行者123 更新时间:2023-11-28 19:25:43 25 4
gpt4 key购买 nike

给定 JSON 结构

var json = {
'a': {
'a1': ['a1a', 'a1b', 'a1c'],
'a2': ['a2a', 'a2b'],
'a3': []
},
'b': {
'b1': ['b1a', 'b1b', 'b1c', 'b1d'],
'b2': ['b2a', 'b2b'],
},
'c': ['c1', 'c2'],
'd': {
'd1': ['d1a', 'd1b', 'd1c'],
'd2': []
},
'e': ['e1', 'e2'],
'f': [
'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10'
]
};

使用 Javascript 如何遍历它来产生所有键和值的数组?换句话说,如果不简单地保留外部存储并在遍历时附加到它,如何返回整个节点键和值集的数组?

例如,在 Python 中我可能会使用生成器。所以也许我应该问,如何在 Javascript 中使用生成器?

使用 jQuery 的 Javascript 示例:

function traverse(jsonObj) {
if( typeof jsonObj == "object" ) {
$.each(jsonObj, function(k,v) {
traverse(v);
});
}
else {
// how can I yield this value instead?
console.log(jsonObj)
}
}

我的预期输出将是所有键和值的数组:

['a', 'a1', 'a1a', 'a1b', 'a1c', 'a2', 'a2a', 'a2b'] // ... and so on

最佳答案

ECMAScript 6 有 generators 。所以你可以将函数写为

function *traverse(value) {
if (typeof value === "object") {
var isArray = Array.isArray(value);
for (var prop in value) {
if (!isArray) yield prop;
yield* traverse(value[prop]);
}
}
else {
yield value;
}
}

并将其用作:

var obj = {
'a': {
'a1': ['a1a', 'a1b', 'a1c'],
'a2': ['a2a', 'a2b'],
'a3': []
}
};

console.log(Array.from(traverse(obj)));

DEMO via 6to5

<小时/>

但如果没有 native 生成器,情况也没有太大不同:

function traverse(value, result) {
result = result || [];
if (typeof value === "object") {
var isArray = Array.isArray(value);
for (var prop in value) {
if (!isArray) result.push(prop);
traverse(value[prop], result);
}
}
else {
result.push(value);
}
return result;
}

console.log(traverse(obj));

关于javascript - 遍历所有节点并在 Javascript 中生成键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27911619/

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