在JavaScript中一组数据如何进行关联呢

我有以下数据

 const data = [
    { id: 56, parentId: 62, text: "56" },
    { id: 74, parentId: null, text: "74" },
    { id: 76, parentId: 80, text: "76" },
    { id: 63, parentId: 62, text: "63" },
    { id: 80, parentId: 86, text: "80" },
    { id: 62, parentId: 74, text: "62" },
    { id: 86, parentId: 74, text: "86" },
  ];

我的尝试

  const result = [];
  const saveMap = {};
  const rootIndex = data.findIndex((item) => {
    const { parentId } = item;
    return parentId === null;
  });
  saveMap[rootIndex] = data[rootIndex].id

  for (let i = 0; i < data.length; i++) {
    for (let j = 0; j < data.length; j++) {
      const root = data[rootIndex];
      const { id } = root;
      if (id == data[j].id) {
        continue
      }
      result.push({source:root.id,target:data[j].id})
      saveMap[j] = data[j].id
    }
  }

  console.log(result);

emmm,不是我想要的结构。。。

我想要数据:

const result = [
    {source:74,target:62},
    {source:74,target:86},
    {source:62,target:56},
    {source:62,target:63},
    {source:86,target:80},
    {source:80,target:76},
    ...
    //依次类推
]

感谢您的帮助.

阅读 1.6k
2 个回答
const data = [
        { id: 56, parentId: 62, text: "56" },
        { id: 74, parentId: null, text: "74" },
        { id: 76, parentId: 80, text: "76" },
        { id: 63, parentId: 62, text: "63" },
        { id: 80, parentId: 86, text: "80" },
        { id: 62, parentId: 74, text: "62" },
        { id: 86, parentId: 74, text: "86" },
    ];

    const findRoot = (data) => {
        return data.filter(item => item.parentId == null);
    }

    const iter = (list, data) => {
        const result = [];
        const children = [];
        list.forEach(item => {
            const _child = data.filter(child => child.parentId == item.id);
            _child.forEach(child => {
                result.push({
                    source: item.id,
                    target: child.id
                });
            })
            children.push(..._child);
        });
        if (children.length) {
            result.push(...iter(children, data));
        }
        return result;
    }

    const result = iter(findRoot(data), data);
    console.log(result);
data.filter(item => item.parentId).map(item => ({source: item.parentId, target: item.id}))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题