Javascript 将对象数组转换为嵌套数组
我有一个对象数组Javascript 将对象数组转换为嵌套数组,javascript,Javascript,我有一个对象数组 [ { id: 1, parent_id: null, title: 'Title 1' }, { id: 2, parent_id: 1, title: 'Title2' }, { id: 3, parent_id: 2, title: 'Title 3' }, { id: 4, parent_id: null, title: 'Title 4' } ] 我需要把这个数组转换成这个 [ { id: 1, parent_id: null
[
{ id: 1, parent_id: null, title: 'Title 1' },
{ id: 2, parent_id: 1, title: 'Title2' },
{ id: 3, parent_id: 2, title: 'Title 3' },
{ id: 4, parent_id: null, title: 'Title 4' }
]
我需要把这个数组转换成这个
[
{
id: 1,
parent_id: null,
children: [
{
id: 2,
parent_id: 1,
title: 'Title2',
children: [
{ id: 3, parent_id: 2, title: "Title 3" }
]
}
]
},
{id: 4, parent_id: null, title: 'Title 4' }
]
我不知道,如何才能做到这一点我认为这会起作用:
const original = [
{ id: 1, parent_id: null, title: 'Title 1' },
{ id: 2, parent_id: 1, title: 'Title2' },
{ id: 3, parent_id: 2, title: 'Title 3' },
{ id: 4, parent_id: null, title: 'Title 4' }
]
const transform = arr => {
for (let i = arr.length - 1; i >= 0; i--) {
const post = arr[i]
const parent = arr.find(p => p.id === post.parent_id)
if (parent) {
if (!parent.children) {
parent.children = []
}
parent.children.push(post)
post.duplicate = true
}
}
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i].duplicate) {
arr.splice(i, 1)
}
}
return arr
}
console.log(transform(original))
这里有一个问题:您可以采用标准方法从id和父id的数据生成树
var data=[{id:1,parent_id:null,title:'title 1'},{id:2,parent_id:1,title:'Title2'},{id:3,parent_id:2,title:'title 3'},{id:4,parent_id:null,title:'title 4'}],
树=函数(数据,根){
var t={};
data.forEach(o=>{
赋值(t[o.id]=t[o.id]|{},o);
t[o.parent_id]=t[o.parent_id]|{};
t[o.parent_id]。children=t[o.parent_id]。children | |[];
t[o.parent\u id].children.push(t[o.id]);
});
返回t[root]。子对象;
}(数据,空);
控制台日志(树)代码>
.as控制台包装{max height:100%!important;top:0;}
尝试以下递归:
function update(item) {
if (item.parent_id) {
const parent = arr.findIndex(p => p.id === item.parent_id);
if (!arr[parent].children)
arr[parent].children = [];
const index = arr[parent].children.findIndex(ch => ch.id === item.id);
if (index >= 0)
arr[parent].children.splice(index, 1);
arr[parent].children.push(item);
update(arr[parent]);
}
}
arr.forEach(item => update(item));
arr = arr.filter(item => !item.parent_id);
console.log(arr);
@这个问题是如何证明研究工作的?请展示你自己为解决这个问题所做的任何尝试。您应该已经尝试过,我们可以帮助您调试。此外,是否对数据进行了排序?什么不起作用?