1

私はこのようなオブジェクトを持っています

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

すべての国のオブジェクトがあります。

私がやりたいのは、特定のISOからオブジェクトをコピーし、それらをオブジェクトの上部に追加することです(元の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 に答える