如何在JavaScript中按父元素排序数组

如何在JavaScript中按父元素排序数组,javascript,arrays,sorting,Javascript,Arrays,Sorting,这个例子很简单,但它将帮助我解决一个复杂的问题,对于使用角度和材质创建的数据表,它接收一个数组。 我收到一个对象数组,我想按父系组织它,如下例所示,我用一种简单的方式表示它,这样就不会让问题与复杂的数据纠缠在一起 我以数组1的形式接收数据: array1 = [ {id:1, parent_id:0, data:'txt'}, {id:2, parent_id:0, data:'txt'}, {id:3, parent_id:1, data:'txt'}, {id:4, pare

这个例子很简单,但它将帮助我解决一个复杂的问题,对于使用角度和材质创建的数据表,它接收一个数组。 我收到一个对象数组,我想按父系组织它,如下例所示,我用一种简单的方式表示它,这样就不会让问题与复杂的数据纠缠在一起

我以数组1的形式接收数据:

array1 = [
  {id:1, parent_id:0, data:'txt'},
  {id:2, parent_id:0, data:'txt'},
  {id:3, parent_id:1, data:'txt'},
  {id:4, parent_id:1, data:'txt'},
  {id:5, parent_id:0, data:'txt'},
  {id:6, parent_id:0, data:'txt'},
  {id:7, parent_id:5, data:'txt'},
];
我想把它组织成array2

array2 = [
  {id:1, parent_id:0, data:'txt'},
  {id:3, parent_id:1, data:'txt'},
  {id:4, parent_id:1, data:'txt'},
  {id:2, parent_id:0, data:'txt'},
  {id:5, parent_id:0, data:'txt'},
  {id:7, parent_id:5, data:'txt'},
  {id:6, parent_id:0, data:'txt'},
];

这里有一个可能的解决方案,首先使用获取没有父对象的对象(即
parent\u id:0
)然后使用
id
属性对它们进行排序。在这之后,我们使用获取前面每个对象的子对象列表,对这些子对象进行排序,并将它们放在父对象的中间位置。然而,这不是一个有效的解决方案,也许还有更好的

常量数组1=[
{id:1,父\u id:0,数据:'txt'},
{id:2,父\u id:0,数据:'txt'},
{id:3,父\u id:1,数据:'txt'},
{id:4,父\u id:1,数据:'txt'},
{id:5,父\u id:0,数据:'txt'},
{id:6,父\u id:0,数据:'txt'},
{id:7,父\u id:5,数据:'txt'},
];
设res=array1
.filter(({parent\u id})=>parent\u id==0)
.sort((a,b)=>a.id-b.id)
.减少((会计科目,当前)=>
{
const children=array1
.filter(({parent\u id})=>parent\u id===curr.id)
.sort((a,b)=>a.id-b.id);
返回[…acc,curr,…children];
}, []);
控制台日志(res)
.as控制台{背景色:黑色!重要;颜色:石灰;}

.作为控制台包装器{max height:100%!important;top:0;}
第二个数组的排序逻辑是什么?array2与array1有何不同?我的意思是,您希望如何组织?您尝试过什么?您熟悉深度优先搜索和/或拓扑排序的概念吗?对于所有要求澄清
array2
是如何形成的人,请绘制隐含树(父id
字段是父id),然后进行深度优先搜索,您将得到准确的
array2