2014-10-11 198 views
0

當使用篩選器對對象中的元素進行排序並將其推送到數組時,它會丟失排序並使用鍵的字母順序如何在插入數組之後保留排序?將對象鍵值排序推入數組時保留對象鍵值排序

app.controller('MainCtrl', function($scope, $filter) { 
    var bigArr = []; 
    var arr = [ 
     { 
      "Type1" : "Canada", 
      "ColPos" : 3 
     }, 
     { 
      "Type2" : "UK", 
      "ColPos" : 1 
     }, 
     { 
      "Type3" : "US", 
      "ColPos" : 2 
     }, 
     { 
      "Type4" : "Madagascar", 
      "ColPos" : 0 
     }, 
    ] 

    var ordered = $filter('orderBy')(arr,'ColPos'); 
    console.log(ordered); 

    var obj = _.assign.apply(_, ordered); 
    console.log(obj) 

    bigArr.push(obj); 
    console.log(bigArr); // ordering is lost 
    }); 

演示:http://plnkr.co/edit/sgFDVRrbrIXg2drUZzL3?p=preview

回答

1

訂購丟失,因爲它實際上並不存在,事實上ES5並指定對象鍵不是一種特殊的方式排序,是瀏覽器的依賴實現的表示here

沒有指定枚舉屬性的機制和順序(步驟6.a在 第一個算法中,步驟7.a在第二個中)。

簡答:你不能依靠這種結構來做到這一點。