2012-03-06 50 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” 将保留所有选定的值。

相关问题