将对象键值排序到数组中时保留它

时间:2014-10-11 23:18:54

标签: javascript angularjs

当使用过滤器对对象中的元素进行排序然后将其推送到数组时,它会丢失排序并使用字母的键顺序如何在插入数组后保留排序?

  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 个答案:

答案 0 :(得分:1)

订购已丢失,因为它确实不存在,实际上ES5确实指定对象密钥没有以特殊方式排序,并且浏览器的实现依赖于所述here

  

枚举属性的机制和顺序(步骤6.a)   第一个算法,第二个步骤7.a未指定。

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