Javascript 重新排列对象-将对象复制(剪切)到另一个对象中
资料 操作:Javascript 重新排列对象-将对象复制(剪切)到另一个对象中,javascript,Javascript,资料 操作: const data = [ { "ID": 1, "parent": "0", "title": "Test-1" }, { "ID": 2, "parent": "1", "title": "Test-1-1" }, { "ID": 3, "parent": "0", "title": "Test-2" }, { "ID": 4, "parent": "0",
const data = [
{
"ID": 1,
"parent": "0",
"title": "Test-1"
},
{
"ID": 2,
"parent": "1",
"title": "Test-1-1"
},
{
"ID": 3,
"parent": "0",
"title": "Test-2"
},
{
"ID": 4,
"parent": "0",
"title": "Test-3"
},
{
"ID": 5,
"parent": "4",
"title": "Test-3-1"
},
{
"ID": 6,
"parent": "4",
"title": "Test-3-2"
},
];
console.log(父/子)代码>根本不起作用
console.log(父母)代码>工作正常。但我不明白为什么。。。let parents\u children
如何影响let parents
?有没有更好的解决方案来归档我要归档的内容?我想您忘了从.map()
返回
请尝试以下操作:
let parents = data.filter(item => item.parent == "0");
let parents_children = parents.map(item => item.children = data.filter(stop => stop.parent == item.ID));
我希望这有帮助 分配和返回必须不同
let parents_children = parents.map(item => {
item.children = data.filter(stop => stop.parent == item.ID)
return item;
});
//性能更好
let parents_children = parents.map(item => {
item.children = data.
filter(stop => stop.parent == item.ID);
return item;
});
工作样本:
const数据=[
{ID:1,父项:“0”,标题:“Test-1”},
{ID:2,父项:“1”,标题:“Test-1-1”},
{ID:3,父项:“0”,标题:“Test-2”},
{ID:4,父项:“0”,标题:“Test-3”},
{ID:5,父项:“4”,标题:“Test-3-1”},
{ID:6,父项:“4”,标题:“Test-3-2”}
];
让parents=data.filter(item=>item.parent==“0”);
让parents\u children=parents.map(项=>{
//创建新对象
返回{
…项目,
子项:data.filter(stop=>stop.parent==item.ID)
};
});
log(JSON.stringify(parents_children,null,4));
控制台日志(数据);
常数数据2=[
{ID:1,父项:“0”,标题:“Test-1”},
{ID:2,父项:“1”,标题:“Test-1-1”},
{ID:3,父项:“0”,标题:“Test-2”},
{ID:4,父项:“0”,标题:“Test-3”},
{ID:5,父项:“4”,标题:“Test-3-1”},
{ID:6,父项:“4”,标题:“Test-3-2”}
];
//更好的性能
让结果=数据2.reduce((map,cur)=>{
如果(当前父项==“0”){
//母公司
map[cur.ID]=map[cur.ID]| |{子项:[]};
map[cur.ID]={…map[cur.ID],…cur};
}否则{
如果(!map[cur.parent])map[cur.parent]={children:[]};
映射[cur.parent].children.push(cur);
}
返回图;
}, {});
让finalResult=[];
for(常量输入结果){
最终结果推送(结果[键]);
}
log(JSON.stringify(finalResult,null,4))代码>
。作为控制台行{color:blue!important}
@mokorana-check,我已经为您更新了更好的选项。非常感谢,效果非常好!但还有一个问题需要进一步理解:console.log(data)
不再表示原始数据。以及console.log(parents)
输出结果。因为,item.children=data.filter(stop=>stop.parent==item.ID)代码>此处u分配子项
分配给原始数据。建议不要mutate@mokorana现在检查//创建新对象
,始终像这样创建新对象
let result = data2.reduce((map, cur) => {
if (cur.parent === "0") {
// parent
map[cur.ID] = map[cur.ID] || { children: [] };
map[cur.ID] = { ...map[cur.ID], ...cur };
} else {
if (!map[cur.parent]) map[cur.parent] = { children: [] };
map[cur.parent].children.push(cur);
}
return map;
}, {});
let finalResult = [];
for (const key in result) {
finalResult.push(result[key]);
}
console.log(JSON.stringify(finalResult, null, 4));