2012-06-20 121 views
0

數組我有這樣如何排序嵌套對象在JavaScript

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 
    }] 
}];​ 
+0

在未來,請您多花時間寫或格式化您的文章。可以找到格式化幫助[這裏](http://stackoverflow.com/editing-help) – Matt

+0

可能重複[如何排序的JavaScript對象數組?](http://stackoverflow.com/questions/979256/how對javascript對象進行排序 –

+1

@Matt點採取 –

回答

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

這應該重新排序任何數量的嵌套級的陣列。

0

使用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); 
    }); 
}); 
0

您可以使用Agile.js這種事情。
實際上,您傳遞的是一個表達式而不是回調函數,它以非常好的方式處理嵌套的屬性和JavaScript表達式。

用法:_.orderBy(array, expression/callback, reverse[optional])

例子:

var orders = [ 
    { product: { price: 91.12, id: 1 } }, 
    { product: { price: 79.21, id: 2 } }, 
    { product: { price: 99.90, id: 3 } }, 
    { product: { price: 19.99, id: 4 } } 
]; 

_.orderBy(orders, 'product.price'); 
// → [orders[3], orders[1], orders[0], orders[2]] 

_.orderBy(orders, '-product.price'); 
// → [orders[2], orders[0], orders[1], orders[3]]