2014-10-11 88 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在第二个中)。

简答:你不能依靠这种结构来做到这一点。