数组排序问题

原数据如下:

[
    { 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);
阅读 2.6k
3 个回答

就是按照source字段排序就是喽

arr.sort((a, b) => a.source > b.source ? 1 : -1)

按照你的预期结果,也没有看出来是根据什么判断来排序的,你的预期结果是依据什么了?因为直接使用sort也是拿不到你想要的结果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题