2012-06-11 47 views
1

我有一個對象,看起來像這樣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; 
    } 
}); 

這給了我一個數組,對象。但是,我將如何將這些添加到原始對象?

謝謝!

+0

JavaScript對象未排序,因此您需要使用數組。 JavaScript對象鍵也是唯一的,所以你需要使用一個數組。你最終可能想得到像'[['US','USA',''CA','加拿大',''AF','阿富汗']]的東西。 –

+0

你能提供你期望的結果嗎?不確定那是什麼... – ggozad

回答

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