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

  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

最佳答案

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


  枚举属性的机制和顺序(第6.a步
  没有指定第一种算法,第二种是步骤7.a。


简短的答案:您不能依靠此结构来执行此操作。

09-12 01:56