当使用过滤器对对象中的元素进行排序然后将其推送到数组时,它会丢失排序并使用字母的键顺序如何在插入数组后保留排序?
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
});
答案 0 :(得分:1)
订购已丢失,因为它确实不存在,实际上ES5确实指定对象密钥没有以特殊方式排序,并且浏览器的实现依赖于所述here :
枚举属性的机制和顺序(步骤6.a) 第一个算法,第二个步骤7.a未指定。
简短的回答:你不能依靠这种结构来做到这一点。