当前位置: 首页 > 知识库问答 >
问题:

将对象的平面数组转换为嵌套对象的数组 [复制]

耿弘阔
2023-03-14

我正在尝试将来自我的数据库的对象的平面数组转换为需要嵌套结构才能管理可扩展子行的react-table。

我已经制作了一个代码沙盒,它非常简单:

https://codesandbox.io/s/tender-chatterjee-kdssi?file=/src/App.js

基本上,我的原始数据结构如下:

  [
    {
      code: "A0",
      parent: ""
    },
    {
      code: "A01",
      parent: "A0"
    },
    {
      code: "A011",
      parent: "A01"
    },
    {
      code: "B0",
      parent: ""
    },
    {
      code: "B01",
      parent: "B0"
    },
    {
      code: "B011",
      parent: "B01"
    }
  ]

我想把它转换成这个结构:

  [
    {
      code: "A0",
      parent: "",
      subRows: [
        {
          code: "A01",
          parent: "A0",
          subRows: [
            {
              code: "A011",
              parent: "A01"
            }
          ]
        }
      ]
    },
    {
      code: "B0",
      parent: "",
      subRows: [
        {
          code: "B01",
          parent: "B0",
          subRows: [
            {
              code: "B011",
              parent: "B01"
            }
          ]
        }
      ]
    }
  ]

我已经尝试了一些递归的方法,但是他们留下了一些选择,所以我很乐意接受一些帮助。

非常感谢。

共有2个答案

萧琛
2023-03-14

我认为React可以使用rxjs,对吗???我认为groupBy会在这方面做得很好。https://www.learnrxjs.io/learn-rxjs/operators/transformation/groupby

赵俊侠
2023-03-14

这可以用一个相当简单的递归方法来完成。

const mockData = [{
    code: "A0",
    parent: ""
  },
  {
    code: "A01",
    parent: "A0"
  },
  {
    code: "A011",
    parent: "A01"
  },
  {
    code: "B0",
    parent: ""
  },
  {
    code: "B01",
    parent: "B0"
  },
  {
    code: "B011",
    parent: "B01"
  }
];


const hierarchize = (parent, list) => {
  const children = list.filter(x => x.parent == parent.code);
  children.forEach(child => hierarchize(child, list));
  parent.subRows = children;
}

const topLevel = mockData.filter(x => x.parent == "");
topLevel.forEach(top => hierarchize(top, mockData));

console.log(topLevel);
 类似资料:
  • 我只想扁平化嵌套JSON的属性,但仍然适用于输入数组中的所有对象 很难将这三个字段放在一个规范中(类型字段、geo字段、properties字段)。我编写了规范来单独完成每一个操作,但是当我将这些规范组合在一个对象中使用时,它会产生错误的输出--对象数组真的把它搞砸了。 期望输出:

  • 问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果:

  • 有没有一种简单的方法,使用或或其他方法来转换数组,如下所示: 变成一个简单的数组,该数组填充了前一个数组中包含的对象的一个属性,如下所示:

  • 问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果:

  • 问题内容: 我碰到SimpleXML对象转换为阵列的这种功能在这里: 因此,我对XML字符串的采用类似于: 它工作得很好,但似乎有点黑吗?有没有更有效/更强大的方法来做到这一点? 我知道SimpleXML对象与数组足够接近,因为它利用了PHP中的ArrayAccess接口,但与多维数组(即循环)一起使用时,仍然不能很好地工作。 谢谢大家的帮助 问题答案: 我在PHP手册注释中找到了这个: 它可以帮