数组排序问题
原数据如下:
[
{ 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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
就是按照source字段排序就是喽
lodash
orderBy
sortBy
按照你的预期结果,也没有看出来是根据什么判断来排序的,你的预期结果是依据什么了?因为直接使用
sort
也是拿不到你想要的结果