1

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

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

它有所有国家的对象。

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

我开始做的是这样的:

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

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

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

谢谢!

4

1 回答 1

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) });
于 2012-06-12T15:53:10.320 回答