Javascript 将对象推入数组时保留对象键值顺序

Javascript 将对象推入数组时保留对象键值顺序,javascript,angularjs,Javascript,Angularjs,当使用过滤器对对象中的元素进行排序,然后将其推送到数组中时,它将丢失排序并使用键的字母顺序。插入数组后如何保持排序 app.controller('MainCtrl', function($scope, $filter) { var bigArr = []; var arr = [ { "Type1" : "Canada", "ColPos" : 3 }, { "Type2" :

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

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

演示:

排序丢失,因为它实际上不存在,事实上ES5确实指定对象键不是以特殊方式排序的,并且依赖于浏览器的实现,如上所述:

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

简短回答:你不能依靠这个结构来完成这项工作