当使用过滤器对对象中的元素进行排序,然后将其压入数组时,它会丢失该排序,并使用键的字母顺序如何在插入数组后如何保留该顺序?
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。
简短的答案:您不能依靠此结构来执行此操作。