gpt4 book ai didi

javascript - 使用 javascript 获取每个级别的 json 值

转载 作者:行者123 更新时间:2023-12-03 11:14:01 36 4
gpt4 key购买 nike

我正在尝试使用递归函数从简单的 json 中获取最后一个键值,使用 javascript

我有这个 json:

{
'a': {
'b': {
'c': 12,
'd': 'Hello World'
},
'e': [1,2,3]
}
}

我的预期结果是:

{
'a/b/c': 12,
'a/b/d': 'Hello World',
'a/e': [1,2,3]
}

我正在尝试:

function getDeepKeys(obj) {
var keys = [];
for (var key in obj) {
keys.push(key);
if (typeof obj[key] === "object") {
var subkeys = getDeepKeys(obj[key]);
keys = keys.concat(subkeys.map(function (subkey) {
return key + "/" + subkey;
}));
}
}
return keys;
}

但出于某种原因,它返回了我:

a/b/c/d/e/0/1/,我不确定为什么要在那里添加这些数字。有人知道我该怎么做吗?

最佳答案

您可以使用比递归开销更少且不会破坏调用堆栈的显式堆栈迭代地执行此操作:

const pathify = o => {
const paths = {};
const stack = [[o, []]];

while (stack.length) {
const [curr, path] = stack.pop();

for (const k in curr) {
if (typeof curr[k] === "object" && !Array.isArray(curr[k])) {
stack.push([curr[k], path.concat(k)]);
}
else {
paths[`${path.join("/")}/${k}`] = curr[k];
}
}
}

return paths;
};

console.log(pathify({'a':{'b':{'c':12,'d':'Hello World'},'e':[1,2,3]}}));

关于javascript - 使用 javascript 获取每个级别的 json 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52921401/

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