2012-03-06 52 views
2

我有一個ID爲「流派」的多選列表項。在我的代碼中,我獲得了「流派」的價值,將其分開,然後遍歷並將每個值添加到另一個數組。但出於某種原因,它增加了一個額外的條目。這裏是我的代碼:在javascript中添加一個額外時間的多個選擇列表值

if ($("#genres").val()!=null) { 
    var genres = $("#genres").val().toString().split(","); 
    for (var i in genres) { 
     model.TitleGenres.push({ GenreId: genres[i] }); 
    } 
} 

變量model.TitleGenres初始化爲[];

當我調試這在Firebug,我得到的值是:

genres: [ "6", "1770" ] 

在循環結束時,我得到:

model.TitleGenres: [Object { GenreId="6"}, Object { GenreId="1770"}, Object { GenreId=function()}] 

我不知道爲什麼有一個額外的GenreId = function()的入口,任何人都可以解釋爲什麼是這樣以及如何消除它?

回答

2

請勿在JS中使用for in迭代(數字索引)數組。

使用for (var i = 0, len = array.length; i < len; i++) { ... }

+0

爲什麼? (我並不是說你錯了,但是這種陳述應該真的得到一個論證的支持,理想情況下,通過引用你的來源。) – 2012-03-06 20:13:32

+0

for..in不應該用於遍歷數組,其中索引順序很重要。不能保證for ... in將以任何特定順序返回索引,並且它將返回所有可枚舉的屬性,包括那些具有非整數名稱和那些被繼承的屬性。由於迭代順序是與實現相關的,迭代數組可能無法以一致的順序訪問元素。因此,在遍歷訪問順序非常重要的數組上迭代時,最好使用帶有數字索引的for循環。 〜MDN – 2012-03-06 20:16:07

+0

第一個答案得到檢查。謝謝,kirilloid。 – 2012-03-06 20:18:58

2

它,因爲你重複的進行「在」,而不是foreach或simpley for數組。使用for in可以遍歷數組對象的所有成員,或者在此例中爲jquery對象。看起來其中之一是一個功能。改爲使用genres.each()

0

如何:

var x = []; 
$('#genres option:selected').each(function() { x.push($(this).val()) }); 

現在 「X」 將保留所有選定的值。

相關問題