在JavaScript中按属性对整个嵌套对象排序

在JavaScript中按属性对整个嵌套对象排序,javascript,arrays,object,Javascript,Arrays,Object,我想循环遍历一个嵌套很深的对象,并根据属性对每个级别进行排序。在这种情况下,它的id 这是我的对象(这里会有更多的级别,为了可读性,我在这里添加了3个级别): 以下是所需的输出: const myObj = [ { id: 2, children: [ { id: 3, children: [] }, { id: 9, children: [] } ]

我想循环遍历一个嵌套很深的对象,并根据属性对每个级别进行排序。在这种情况下,它的
id

这是我的对象(这里会有更多的级别,为了可读性,我在这里添加了3个级别):

以下是所需的输出:

const myObj = [
  {
    id: 2,
    children: [
      {
        id: 3,
        children: []
      },
      {
        id: 9,
        children: []
      }
    ]
  },
  {
    id: 15,
    children: [
      {
        id: 4,
        children: [
          {
            id: 30,
            children: [],
          },
          {
            id: 35,
            children: [
              {
                id: 8,
                children: []
              },
              {
                id: 12,
                children: []
              }
            ]
          },
        ]
      },
      {
        id: 9,
        children: [
          {
            id: 1,
            children: []
          },
          {
            id: 4,
            children: []
          }
        ]
      },
    ]
  }
]
下面是我对它进行分类的尝试:

constmyobj=[{id:15,children:[{id:9,children:[]},{id:1,children:[]},{id:4,children:[{id:35,children:[{id:12,children:[]},{id:8,children:[]},{id:30,children:[],},},},},{id:2,children id:9,children id:3,children:[]},]
功能sortByOrderIndex(obj){
对象排序((a,b)=>(a.orderindex>b.orderindex)?1:((b.orderindex>a.orderindex)?-1:0);
返回obj;
}
功能sortNestedObj(obj){
SortByrderIndex(obj);
for(设i=0;i
您可以递归地调用数组及其对象的子对象,如下所示:

constmyobj=[{id:15,children:[{id:9,children:[]},{id:1,children:[]},{id:4,children:[{id:35,children:[{id:12,children:[]},{id:8,children:[]},{id:30,children:[],},},},},{id:2,children id:9,children id:3,children:[]},]
函数sortArray(数组){
排序((a,b)=>a.id-b.id);
array.forEach(a=>{
如果(a.children&&a.children.length>0)
索塔雷(a.儿童)
})
返回数组;
}

console.log(sortArray(myObj))
您可以创建一个递归排序函数:

constmyobj=[{id:15,children:[{id:9,children:[]},{id:1,children:[]},{id:4,children:[{id:35,children:[{id:12,children:[]},{id:8,children:[]},{id:30,children:[],},},},},{id:2,children id:9,children id:3,children:[]},]
const orderChildren=obj=>{
对象子类排序((a,b)=>a.id-b.id);
if(obj.children.some(o=>o.children.length)){
forEach(child=>orderChildren(child));
}
返回obj;
};
const myNewObj=myObj.map(o=>orderChildren(o)).sort((a,b)=>a.id-b.id);
console.log(myNewObj)
。作为控制台包装{最大高度:100%!重要;顶部:0;}
您可以执行以下操作:

constmyobj=[{id:15,children:[{id:9,children:[]},{id:1,children:[]},{id:4,children:[{id:35,children:[{id:12,children:[]},{id:8,children:[]},{id:30,children:[],},},},},{id:2,children id:9,children id:3,children:[]},]};
const deepSortById=arr=>(arr.forEach(a=>a.children&&deepSortById(a.children)),arr.sort((a,b)=>a.id-b.id));
const result=deepSortById(myObj);
控制台日志(结果)
。作为控制台包装{最大高度:100%!重要;顶部:0;}
const myObj = [
  {
    id: 2,
    children: [
      {
        id: 3,
        children: []
      },
      {
        id: 9,
        children: []
      }
    ]
  },
  {
    id: 15,
    children: [
      {
        id: 4,
        children: [
          {
            id: 30,
            children: [],
          },
          {
            id: 35,
            children: [
              {
                id: 8,
                children: []
              },
              {
                id: 12,
                children: []
              }
            ]
          },
        ]
      },
      {
        id: 9,
        children: [
          {
            id: 1,
            children: []
          },
          {
            id: 4,
            children: []
          }
        ]
      },
    ]
  }
]