2 回答
![?](http://img1.sycdn.imooc.com/533e4d470001a00a02000200-100-100.jpg)
TA贡献1815条经验 获得超10个赞
您可以使用_id作为键的对象并将其父对象与它们的关系一起存储。最后取没有父项的子项。
var data = [{ _id: "4b04e450-06d5-4453-8d50-d3b2a70d9b2d", task_name: "Parent2", parents: [] }, { _id: "a15ca08e-f13b-4d73-a496-ba23832ea233", task_name: "Endpoints", parents: [{ _id: "97bbf892-8a2a-4f45-befd-4fdbebded04b", task_name: "Parent1" }, { _id: "4b04e450-06d5-4453-8d50-d3b2a70d9b2d", task_name: "Parent2" }] }, { _id: "ee78316a-491e-4db5-8f82-13b12b5b86fc", task_name: "Mapping", parents: [{ _id: "97bbf892-8a2a-4f45-befd-4fdbebded04b", task_name: "Parent1" }] }, { _id: "97bbf892-8a2a-4f45-befd-4fdbebded04b", task_name: "Parent1", parents: [] }],
tree = function (data, root) {
var t = {};
data.forEach(({ parents, ...o }) => {
Object.assign(t[o._id] = t[o._id] || {}, o);
if (!parents.length) {
t[root] = t[root] || {};
t[root].children = t[root].children || [];
t[root].children.push(t[o._id]);
return;
}
parents.forEach(p => {
Object.assign(t[p._id] = t[p._id] || {}, p);
t[p._id].children = t[p._id].children || [];
t[p._id].children.push(t[o._id]);
});
});
return t[root].children;
}(data);
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
![?](http://img1.sycdn.imooc.com/5333a1bc00014e8302000200-100-100.jpg)
TA贡献1876条经验 获得超7个赞
您可以保留平面 JSON 数组结构并仅存储 Id 以便像这样交叉引用(ID 只是示例)
[
{
"_id": "97bbf892-8a2a-4f45-befd-4fdbebded04b",
"task_name": "Task1",
"children": [
"ee78316a-491e-4db5-8f82-13b12b5b86fc",
"a15ca08e-f13b-4d73-a496-ba23832ea233"
],
"parents": [
"ee78316a-491e-4db5-8f82-13b12b5b86fc",
"a15ca08e-f13b-4d73-a496-ba23832ea233"
]
},
{
"_id": "97bbf892-8a2a-4f45-befd-4fdbebded04b",
"task_name": "Task2",
"children": [
"ee78316a-491e-4db5-8f82-13b12b5b86fc",
"a15ca08e-f13b-4d73-a496-ba23832ea233"
],
"parents": [
"ee78316a-491e-4db5-8f82-13b12b5b86fc",
"a15ca08e-f13b-4d73-a496-ba23832ea233"
]
},
{
"_id": "97bbf892-8a2a-4f45-befd-4fdbebded04b",
"task_name": "Task3",
"children": [
"ee78316a-491e-4db5-8f82-13b12b5b86fc",
"a15ca08e-f13b-4d73-a496-ba23832ea233"
],
"parents": [
"ee78316a-491e-4db5-8f82-13b12b5b86fc",
"a15ca08e-f13b-4d73-a496-ba23832ea233"
]
}
]
或者,如果您想以您目前希望的方式实现它,您可以使用此功能。没有完全测试,但你明白了
var tasks = [
{
"_id": "4b04e450-06d5-4453-8d50-d3b2a70d9b2d",
"task_name": "Parent2",
"parents": []
},
{
"_id": "a15ca08e-f13b-4d73-a496-ba23832ea233",
"task_name": "Endpoints",
"parents": [
{
"_id": "97bbf892-8a2a-4f45-befd-4fdbebded04b",
"task_name": "Parent1"
},
{
"_id": "4b04e450-06d5-4453-8d50-d3b2a70d9b2d",
"task_name": "Parent2"
}
]
},
{
"_id": "ee78316a-491e-4db5-8f82-13b12b5b86fc",
"task_name": "Mapping",
"parents": [
{
"_id": "97bbf892-8a2a-4f45-befd-4fdbebded04b",
"task_name": "Parent1"
}
]
},
{
"_id": "97bbf892-8a2a-4f45-befd-4fdbebded04b",
"task_name": "Parent1",
"parents": []
}
];
function transformTasks(tasks){
var transformed = {};
var transformedAsArray = [];
for(var taskIndex in tasks){
var task = tasks[taskIndex];
if(transformed[task["_id"]] === undefined){
transformed[task["_id"]] = {_id:task["_id"],task_name:task["task_name"],children:[]};
transformedAsArray.push(transformed[task["_id"]]);
}
for(var parentIndex in task["parents"]){
var parentTask = task["parents"][parentIndex];
if(transformed[parentTask["_id"]] === undefined){
transformed[parentTask["_id"]] = {_id:parentTask["_id"],task_name:parentTask["task_name"],children:[]};
transformedAsArray.push(transformed[parentTask["_id"]]);
}
transformed[parentTask["_id"]].children.push(transformed[task["_id"]]);
}
}
return transformedAsArray;
}
console.log(transformTasks(tasks));
添加回答
举报