数据
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"
},
];业务:
let parents = data.filter(item => item.parent == "0");
let parents_children = parents.map(item => item.children = data.filter(stop => stop.parent == item.ID));console.log(parents_children);根本不起作用。
console.log(parents);工作得很好。但我不明白为什么..。let parents_children是如何影响let parents的?有什么更好的解决方案来存档吗?
发布于 2020-03-28 09:47:21
分配和返回必须是不同的
let parents_children = parents.map(item => {
item.children = data.
filter(stop => stop.parent == item.ID);
return item;
});//性能更好的
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));工作样本:
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" }
];
let parents = data.filter(item => item.parent == "0");
let parents_children = parents.map(item => {
// create new object
return {
...item,
children : data.filter(stop => stop.parent == item.ID)
};
});
console.log(JSON.stringify(parents_children, null, 4));
console.log(data);
const data2 = [
{ 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" }
];
// Better performance
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));.as-console-row {color: blue!important}
发布于 2020-03-28 09:46:09
我想你忘了从.map()回来了。
尝试以下几点:
let parents_children = parents.map(item => {
item.children = data.filter(stop => stop.parent == item.ID)
return item;
});我希望这能帮到你!
https://stackoverflow.com/questions/60899517
复制相似问题