多个选择列表值在javascript中交互一个额外的时间

多个选择列表值在javascript中交互一个额外的时间,javascript,jquery,html,Javascript,Jquery,Html,我有一个id为“流派”的多选列表项。在我的代码中,我得到“genres”的值,将其拆分,然后迭代并将每个值添加到另一个数组中。但出于某种原因,它增加了一个额外的条目。这是我的密码: if ($("#genres").val()!=null) { var genres = $("#genres").val().toString().split(","); for (var i in genres) { model.TitleGenres.push({ GenreId

我有一个id为“流派”的多选列表项。在我的代码中,我得到“genres”的值,将其拆分,然后迭代并将每个值添加到另一个数组中。但出于某种原因,它增加了一个额外的条目。这是我的密码:

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()的额外条目,有人能解释一下为什么会有这个条目以及如何消除它吗?

不要用
for in
在JS中迭代(数字索引)数组

使用
for(var i=0,len=array.length;i
不要使用
for in在JS中迭代(数字索引)数组


使用
for(var i=0,len=array.length;i
这是因为您使用“for in”而不是
foreach
或simpley
for
迭代数组。使用
for in
可以迭代数组对象的所有成员,或者在本例中是jquery对象。似乎其中一个是函数。改为使用
genres.each()

其原因是您使用“for in”而不是
foreach
或simpley
for
迭代数组。使用
for in
可以迭代数组对象的所有成员,或者在本例中是jquery对象。似乎其中一个是函数。改用
genres.each()

这个怎么样:

var x = [];
$('#genres option:selected').each( function() { x.push($(this).val()) } );
现在“x”将保存所有选定的值。

这个怎么样:

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

现在“x”将保存所有选定的值。

为什么?(我不是说你错了,但是这种陈述应该有一个参数来支持,最好是引用你的源代码。)for..in不应该用于迭代索引顺序很重要的数组。无法保证for…in将以任何特定顺序返回索引,并返回所有可枚举属性,包括具有非整数名称的属性和继承的属性。由于迭代顺序取决于实现,因此在数组上迭代可能不会以一致的顺序访问元素。因此,在访问顺序非常重要的数组时,最好使用带有数字索引的for循环MDN第一个答案得到检查。谢谢,kirilloid。因为
for…in
迭代对象,而不是数组。然而,基本上数组是一个对象,并且从
中为…获得的额外值可以在kirilloid的代码中看到。这是Array-object的
length
-属性。实际上,您可以,但必须使用
hasOwnProperty
检查每个键。为什么?(我不是说你错了,但是这种陈述应该有一个参数来支持,最好是引用你的源代码。)for..in不应该用于迭代索引顺序很重要的数组。无法保证for…in将以任何特定顺序返回索引,并返回所有可枚举属性,包括具有非整数名称的属性和继承的属性。由于迭代顺序取决于实现,因此在数组上迭代可能不会以一致的顺序访问元素。因此,在访问顺序非常重要的数组时,最好使用带有数字索引的for循环MDN第一个答案得到检查。谢谢,kirilloid。因为
for…in
迭代对象,而不是数组。然而,基本上数组是一个对象,并且从
中为…获得的额外值可以在kirilloid的代码中看到。它是Array-object的
length
-属性。实际上,您可以,但必须使用
hasOwnProperty
检查每个键。