Underscore.js,从对象中获取两个项目并添加到顶部

时间:2012-06-11 18:20:15

标签: javascript underscore.js

我有一个看起来像这样的对象

{
 "AF" : {
   "name" : "Afghanistan"
 },
 "AL" : {
   "name" : "Albania"
 }
}

它包含所有国家/地区的对象。

我想要做的是从某些ISO中复制对象并将它们添加到对象的顶部(不删除原始对象)。

我开始做的是:

var filtered = _.collect(data, function(item, key){

    if($.inArray(item.iso, ['US','CA']) !== -1) {
            return item;
    }
});

这给了我一个带有对象的数组。但是,我如何将这些添加到原始对象?

谢谢!

1 个答案:

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