数组排序问题

发布于 2022-09-12 03:11:09 字数 1438 浏览 38 评论 0

原数据如下:

[
    { 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

巷子口的你 2022-09-19 03:11:09

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

arr.sort((a, b) => a.source > b.source ? 1 : -1)
メ斷腸人バ 2022-09-19 03:11:09

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文