使用 lodash 对嵌套对象进行分组

发布于 2025-01-15 14:36:55 字数 1221 浏览 0 评论 0原文

我有这样的对象。

  data = [
{
  id: "0",
  name: "maths",
  levelNo: 0,
  level: null
},
{
  id: "15",
  name: "sceince",
  levelNo: 0,
  level: null
},
{
  name: "algebra",
  id: "1",
  parentId: "0",
  levelNo: 1,
  level: {
    id: "0",
    name: "maths"
  }
},
{
  name: "alfunction",
  id: "2",
  parentId: "1",
  levelNo: 2,
  level: {
    id: "1",
    name: "alegera"
  }
},
{
  name: "bhumiti",
  id: "3",
  parentId: "1",
  levelNo: 2,
  level: {
    id: "1",
    name: "alegera"
  }
},
{
  name: "paryavan",
  id: "4",
  parentId: "0",
  levelNo: 1,
  level: {
    id: "0",
    name: "maths"
  }
},
{
  name: "trikon",
  id: "5",
  parentId: "3",
  levelNo: 3,
  level: {
    id: "3",
    name: "bhumiti"
  }
}];

并将这个对象转换成

  subject = [
{
  name: "maths",
  id: "0",
  items: [
    {
      id: "1",
      name: "alegera",
      items: [
        {
          name: "alfunction",
          id: "2"
        },
        {
          name: "bhumiti",
          id: "3",
          items: [
            {
              name: "trikon",
              id: "5"
            }
          ]
        }
      ]
    },
    {
      id: "4",
      name: "paryavan"
    }
  ]
}];

I have object like this.

  data = [
{
  id: "0",
  name: "maths",
  levelNo: 0,
  level: null
},
{
  id: "15",
  name: "sceince",
  levelNo: 0,
  level: null
},
{
  name: "algebra",
  id: "1",
  parentId: "0",
  levelNo: 1,
  level: {
    id: "0",
    name: "maths"
  }
},
{
  name: "alfunction",
  id: "2",
  parentId: "1",
  levelNo: 2,
  level: {
    id: "1",
    name: "alegera"
  }
},
{
  name: "bhumiti",
  id: "3",
  parentId: "1",
  levelNo: 2,
  level: {
    id: "1",
    name: "alegera"
  }
},
{
  name: "paryavan",
  id: "4",
  parentId: "0",
  levelNo: 1,
  level: {
    id: "0",
    name: "maths"
  }
},
{
  name: "trikon",
  id: "5",
  parentId: "3",
  levelNo: 3,
  level: {
    id: "3",
    name: "bhumiti"
  }
}];

and convert this object into

  subject = [
{
  name: "maths",
  id: "0",
  items: [
    {
      id: "1",
      name: "alegera",
      items: [
        {
          name: "alfunction",
          id: "2"
        },
        {
          name: "bhumiti",
          id: "3",
          items: [
            {
              name: "trikon",
              id: "5"
            }
          ]
        }
      ]
    },
    {
      id: "4",
      name: "paryavan"
    }
  ]
}];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

风流物 2025-01-22 14:36:55

您可以使用一个使用 parentIdid 的函数,而不使用 levelNolevel

const
    getTree = (data, root) => {
        const t = {};
        data.forEach(({ parentId, levelNo, level, ...o }) =>
            ((t[parentId] ??= {}).children ??= []).push(Object.assign(t[o.id] ??= {}, o))
        );
        return t[root].children;
    },
    data = [{ id: "0", name: "maths", levelNo: 0, level: null }, { id: "15", name: "sceince", levelNo: 0, level: null }, { name: "algebra", id: "1", parentId: "0", levelNo: 1, level: { id: "0", name: "maths" } }, { name: "alfunction", id: "2", parentId: "1", levelNo: 2, level: { id: "1", name: "alegera" } }, {  name: "bhumiti", id: "3", parentId: "1", levelNo: 2, level: { id: "1", name: "alegera" } }, { name: "paryavan", id: "4", parentId: "0", levelNo: 1, level: { id: "0", name: "maths" } }, { name: "trikon", id: "5", parentId: "3", levelNo: 3, level: { id: "3", name: "bhumiti" } }],
    tree = getTree(data);

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

You could take a function which uses parentId and id without levelNo and level.

const
    getTree = (data, root) => {
        const t = {};
        data.forEach(({ parentId, levelNo, level, ...o }) =>
            ((t[parentId] ??= {}).children ??= []).push(Object.assign(t[o.id] ??= {}, o))
        );
        return t[root].children;
    },
    data = [{ id: "0", name: "maths", levelNo: 0, level: null }, { id: "15", name: "sceince", levelNo: 0, level: null }, { name: "algebra", id: "1", parentId: "0", levelNo: 1, level: { id: "0", name: "maths" } }, { name: "alfunction", id: "2", parentId: "1", levelNo: 2, level: { id: "1", name: "alegera" } }, {  name: "bhumiti", id: "3", parentId: "1", levelNo: 2, level: { id: "1", name: "alegera" } }, { name: "paryavan", id: "4", parentId: "0", levelNo: 1, level: { id: "0", name: "maths" } }, { name: "trikon", id: "5", parentId: "3", levelNo: 3, level: { id: "3", name: "bhumiti" } }],
    tree = getTree(data);

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

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