gpt4 book ai didi

javascript - 将平面对象数组转换为嵌套对象数组

转载 作者:行者123 更新时间:2023-12-02 22:57:06 26 4
gpt4 key购买 nike

我在将平面数组转换为多层嵌套数组时遇到问题


[{
code: "1",
text: "FatturaElettronicaHeader",
},
{
code: "1.1",
text: "DatiTrasmissione",
},
{
code: "1.1.5",
text: "ContattiTrasmittente",
},
{
code: "1.1.5.1",
text: "Telefono",
},
{
code: "1.1.5.2",
text: "Email",
},
{
code: "1.2",
text: "CedentePrestatore",
}
]

我希望这样,如果一个数组元素代码包含另一个数组元素的代码,它应该是该元素的子元素。因此 1.1 和 1.2 都是 1 的子级。那么 1.1.5 只是 1.1 的子级。新数组中每个对象只能有一个

最佳答案

您可以使用forEach循环创建嵌套树结构来迭代数组,然后对于每个对象,您可以使用split来获取路径数组并reduce 方法根据路径数组创建嵌套结构。

const data = [{"code":"1","text":"FatturaElettronicaHeader"},{"code":"1.1","text":"DatiTrasmissione"},{"code":"1.1.5","text":"ContattiTrasmittente"},{"code":"1.1.5.1","text":"Telefono"},{"code":"1.1.5.2","text":"Email"},{"code":"1.2","text":"CedentePrestatore"}];

const result = [], level = {result}
data.forEach(e => {
e.code.split('.').reduce((r, k) => {
if(!r[k]) {
r[k] = {result: []}
r.result.push({...e, children: r[k].result})
}
return r[k];
}, level)
})

console.log(result);

您还可以使用两个 reduce 方法而不是 forEach 循环来获得相同的结果。

const data = [{"code":"1","text":"FatturaElettronicaHeader"},{"code":"1.1","text":"DatiTrasmissione"},{"code":"1.1.5","text":"ContattiTrasmittente"},{"code":"1.1.5.1","text":"Telefono"},{"code":"1.1.5.2","text":"Email"},{"code":"1.2","text":"CedentePrestatore"}];

const result = data.reduce((level, {code, ...rest}) => {
return code.split('.').reduce((r, k) => {
if(!r[k]) {
const children = [];
r[k] = {result: children}
r.result.push({code, ...rest, children})
}
return r[k]
}, level), level
}, {result: []}).result

console.log(result);

关于javascript - 将平面对象数组转换为嵌套对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57933113/

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