1

私はこのような配列を持っています

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

ここで、完全なコレクションを attribute で並べ替えたいorderので、属性の順序に基づいて外側の配列と内側の配列の両方を並べ替える必要があります。

最終的な出力は次のようになります。

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

2 に答える 2

4
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);

これにより、ネストされたレベルの数に応じて配列が並べ替えられます。

于 2012-06-20T12:55:23.933 に答える
1

適切な比較関数を使用して、の各要素で使用Array.prototype.sortして呼び出します。このようなものが動作するはずです:arrayarray

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);
  });
});
于 2012-06-20T12:49:58.577 に答える