gpt4 book ai didi

javascript - javascript中遍历一个对象并转换为特定格式

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

我有以下对象结构:

{
a: {
b: "abc",
c: [
{
d: "pqr",
e: true
},
{
f: 1,
e: ["xyz", 1]
}
]
}
}

现在我想将这些结构转换为预期输出中显示的特定格式。

我正在尝试遍历上面的结构,但构造的路径不正确这就是我正在做的事情

const getFinalNode = function(data, path){
if (typeof data === 'object'){
for (let key in data) {
// console.log(key);
if (typeof data[key] === 'object'){
path += key+'/'
getFinalNode(data[key], path)
// console.log(true);
}else{
console.log({
value: data[key],
key: key,
path:path
})
}
}
}
}
getFinalNode(data, "");

我的预期输出应该是

[
{
name: "b",
value: "abc",
path: "a/b"
},
{
name: "d",
value: "pqr",
path: "a/c/0/d"
},
{
name: "e",
value: true,
path: "a/c/0/e"
},
{
name: "f",
value: 1,
path: "a/c/1/f"
},
{
name: "e",
value: 'xyz',
path: "a/c/1/e"
},
{
name: "e",
value: 1,
path: "a/c/1/e"
}
]

那么我如何遍历上述结构并将其转换为预期输出,或者是否有任何解决方案可以在我现有的代码中使用。

现在我得到以下输出

enter image description here

最佳答案

您通常只需要传递一个数组并对您正在构建的路径进行一些调整。

在最终路径中包含最后一项有点令人惊讶,并且进行了一些额外的调整,但我认为这就是您在结果中寻找的内容。

const getFinalNode = function(data, path, result){
result = result || [];

// This check isn't needed if the initial call will always be an object.
if (typeof data === 'object'){
for (let [key, val] of Object.entries(data)) {
if (typeof val === 'object'){
getFinalNode(val, path ? (path + "/" + key) : key, result);

}else{
const notNum = isNaN(key);
result.push({
name: notNum ? key : path.slice(path.lastIndexOf("/") + 1),
value: val,
path:path + (notNum ? "/" + key : "")
});
}
}
}
return result;
}

const data = {
a: {
b: "abc",
c: [
{
d: "pqr",
e: true
},
{
f: 1,
e: ["xyz", 1]
}
]
}
};

console.log(getFinalNode(data, ""));

我在 for-of 中使用了 Object.entries() 和解构赋值,只是为了方便将键和值分配给变量。您原来的 for-in 循环也很好。

关于javascript - javascript中遍历一个对象并转换为特定格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47677894/

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