【问题标题】:How To sort an array of nested objects in javascript如何在javascript中对嵌套对象数组进行排序
【发布时间】:2024-05-29 10:20:02
【问题描述】:

我有一个这样的数组

var array = [{
    order: 3,
    sub - array: [{
        order: 2
    },{
        order: 1
    }]
},{
    order: 2,
    sub - array: [{
        order: 2
    },{
        order: 1
    }]
}];​

现在我想对属性order 上的完整集合进行排序,所以无论是外部 以及内部数组应根据属性顺序进行排序。

最终的输出应该是这样的。

var array = [{
    order: 2,
    sub - array: [{
        order: 1
    },{
        order: 2
    }]
},{
    order: 3,
    sub - array: [{
        order: 1
    },{
        order: 2
    }]
}];​

【问题讨论】:

  • 今后,请花更多时间撰写或格式化您的帖子。格式化帮助可以找到here
  • @jbabey 结构可以是任意数量的深度,抱歉没有得到接受的答案部分。

标签: javascript arrays sorting object nested


【解决方案1】:
var propertySort = function(a, b){
    return a.order > b.order ? 1 : (a.order < b.order ? -1 : 0);
    }

var reorder = function(arr){
    var l = arr.length;
    while (l--){
        if (arr[l]['sub-array']){
            reorder(arr[l]['sub-array']);
        }
    }
arr.sort(propertySort);
};

reorder(arr);

console.log(arr);

这应该为任意数量的嵌套级别重新排序数组。

【讨论】:

    【解决方案2】:

    使用Array.prototype.sort 并在array 上调用它,然后在array 的每个元素上使用适当的比较函数。 这样的事情应该可以工作:

    array.sort(function (e1, e2) {
      return (e1.order - e2.order);
    });
    
    array.forEach(function(e) {
      e["sub-array"].sort(function (e1, e2) {
        return (e1.order - e2.order);
      });
    });
    

    【讨论】:

      最近更新 更多