我有一个看起来像这样的对象
{
"AF" : {
"name" : "Afghanistan"
},
"AL" : {
"name" : "Albania"
}
}
它包含所有国家/地区的对象。
我想要做的是从某些ISO中复制对象并将它们添加到对象的顶部(不删除原始对象)。
我开始做的是:
var filtered = _.collect(data, function(item, key){
if($.inArray(item.iso, ['US','CA']) !== -1) {
return item;
}
});
这给了我一个带有对象的数组。但是,我如何将这些添加到原始对象?
谢谢!
答案 0 :(得分:1)
正如@ mu-is-too-short所说,JS对象没有对其属性进行强制排序。
此外,您的对象的属性没有iso
属性,您依赖它。
请在看到之后编辑您的问题:)
如果您的代码依赖于此,那么您的方法就是错误的。正如他所建议的,你应该使用一个数组,但你可以将对象保留在其中。我想你会先从问题中首先显示的对象文字结构开始。使用此代码段,您将使用默认顺序创建一个数组,然后将过滤后的对象添加到该数组的头部:
var data = {
"AF" : {
"name" : "Afghanistan"
},
"AL" : {
"name" : "Albania"
}
};
var countries = _.collect(data, _.identity);
var repeated = [];
_.forEach(countries, function(country) {
if (repeatsAtTheTop(country)) {
// Added in reverse order so it preserves the
// original once unshifted into the original array
repeated.unshift(country);
}
});
_.forEach(repeated, function(item, index) { countries.unshift(item) });