我的后端服务将数组的节点列表发送给我。但我需要的是,每个下一个节点都是其上一个节点的值(请参见示例)。我希望整个列表作为singe对象中的嵌套对象。
我所拥有的:
[
{
"nodeId": 1,
},
{
"nodeId": 3,
},
{
"nodeId": 16,
}
]
我需要什么:
[
{
"nodeId": 1,
"staticChild": [
{
"nodeId": 3,
"staticChild": [
{
"nodeId": 16,
}
]
}
]
}
]
答案 0 :(得分:3)
您可以从右侧缩小数组,并使用staticChild
属性构建一个新对象。
var array = [{ nodeId: 1 }, { nodeId: 3 }, { nodeId: 16 }],
result = array.reduceRight((a, b) => ({ ...b, staticChild: [a] }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
根据您提供的输入/输出,可以使用递归函数,如:
const data = [{
nodeId: 1
},
{
nodeId: 3
},
{
nodeId: 16
}
];
const transform = data => {
const [node, ...rest] = data;
if (rest.length > 0) {
return {
...node,
staticChild: [transform(rest)]
};
} else {
return {
...node,
hasChildren: false
};
}
};
const result = transform(data);
console.log(result);
答案 2 :(得分:1)
答案 3 :(得分:1)
您可以使用reduceRight()
数组方法执行转换。
const data = [{
"nodeId": 1,
},
{
"nodeId": 3,
},
{
"nodeId": 16,
}
]
const nested = data.reduceRight((acc, item) => {
return [ { ...item, staticChild: acc } ]
}, []);
console.log(nested);
或更简洁地说:
const nested = data.reduceRight((acc, item) => [ { ...item, staticChild: acc } ],[]);