原数据如下:
[
{ source: 'taskNode1', taget: 'taskNode2' },
{ source: 'taskNode2', taget: 'taskNode3' },
{ source: 'sqlTask1591780542359', taget: 'taskNode1' },
{ source: 'taskNode3', taget: 'hiveTask1591780543877' },
{ source: 'hiveTask1591780543877', taget: 'shellTask1591780545346' },
];
希望排序成以下情况:
[
{ source: 'sqlTask1591780542359', taget: 'taskNode1' },
{ source: 'taskNode1', taget: 'taskNode2' },
{ source: 'taskNode2', taget: 'taskNode3' },
{ source: 'taskNode3', taget: 'hiveTask1591780543877' },
{ source: 'hiveTask1591780543877', taget: 'shellTask1591780545346' },
];
大佬们能给个思路吗?
有了一个方法
var list = [
{ source: "taskNode1", target: "taskNode2" },
{ source: "taskNode2", target: "taskNode3" },
{ source: "sqlTask1591780542359", target: "taskNode1" },
{ source: "taskNode3", target: "hiveTask1591780543877" }
];
var targets = list.map(v => v.target);
var finds = list.filter(v => !targets.includes(v.source));
var chainList = (current, list) => {
var find = list.find(v => v.source === current.target);
if (!find) {
return [];
} else {
return [find, ...chainList(find, list)];
}
};
var res = finds.map(v => [v, ...chainList(v, list)]);
console.log(res);
就是按照source字段排序就是喽