Javascript indexOf为数组中存在的值返回-1

Javascript indexOf为数组中存在的值返回-1,javascript,Javascript,我有一个数组定义如下: var numeric = [{ Value: "0" }, { Value: "1" }, { Value: "2" }, { Value: "3" }]; 我试图确定此数组中是否存在特定值。我已经尝试了下面所有返回-1的行 numeric.indexOf(1); numeric.indexOf("1"); numeric.indexOf({Value: "1"}); 假设我无法控制数组的定义方式。如何确定这种特殊类型的数组中是否存在值?您可以使用循环遍历对象:

我有一个数组定义如下:

var numeric =  [{ Value: "0" }, { Value: "1" }, { Value: "2" }, { Value: "3" }];
我试图确定此数组中是否存在特定值。我已经尝试了下面所有返回
-1
的行

numeric.indexOf(1);
numeric.indexOf("1");
numeric.indexOf({Value: "1"});

假设我无法控制数组的定义方式。如何确定这种特殊类型的数组中是否存在值?

您可以使用循环遍历对象:

var numeric=[{
值:“0”
}, {
值:“1”
}, {
值:“2”
}, {
值:“3”
}];
for(数值中的var键){
var值=数字[键];
如果(value.value==“1”){
控制台日志(“ok”);
}

}
您可以使用循环遍历对象:

var numeric=[{
值:“0”
}, {
值:“1”
}, {
值:“2”
}, {
值:“3”
}];
for(数值中的var键){
var值=数字[键];
如果(value.value==“1”){
控制台日志(“ok”);
}

}
您必须遍历数组并检查属性

var numeric=[{Value:“0”},{Value:“1”},{Value:“2”},{Value:“3”}];
var指数=-1;

对于(var i=0;i,您必须遍历数组并检查属性

var numeric=[{Value:“0”},{Value:“1”},{Value:“2”},{Value:“3”}];
var指数=-1;

对于(var i=0;i,因为numeric是一个数组,所以可以使用
.findIndex()

找到的将是值==1的项的索引,如果找不到,则为-1。

如果需要布尔结果,最好使用
.some()


。请注意,较旧的浏览器不支持这两个函数。

因为numeric是一个数组,所以您可以使用
.findIndex()

找到的将是值==1的项的索引,如果找不到,则为-1。

如果需要布尔结果,最好使用
.some()



。请注意,较旧的浏览器不支持这两个函数。

编写自己的函数,在数组中循环,并检查对象的
Value
属性是否等于您提供的参数。
indexOf
仅检查数组是否包含值,它不是“复杂的”或者请记住,
new Object===new Object
返回
false
,只有在引用相同的情况下,对象才是相等的。@meder是的,我只是试图避免添加一个小帮助函数来尽可能保持代码的整洁。如果没有问题(这不是有任意要求的家庭作业)@tnw:helper函数的全部目的是为您提供干净的代码。编写自己的函数,在数组中循环,并检查对象的
Value
属性是否等于您提供的参数。
indexOf
仅检查数组是否包含值,它不是“复杂的”或者请记住,
new Object===new Object
返回
false
,只有在引用相同的情况下,对象才是相等的。@meder是的,我只是试图避免添加一个小帮助函数来尽可能保持代码的整洁。如果没有问题(这不是有任意要求的家庭作业)@tnw:helper函数的全部目的是为您提供干净的代码。不要在
中使用
for…来迭代数组。使用常规的
for
循环。@MattBurland为什么?奇怪的是,在这种情况下,我会选择
while
而不是
for
altogether@tnw:有两个原因。首先,你看,它不应该用在顺序很重要。其次,它将迭代您可能不期望的属性。与从prototype继承的属性类似,除非您选中
hasOwnProperty
@Alvarontoro:或者在找到匹配项后,您至少应该
for
循环中中断
。不要在
中使用
for…来迭代数组。请使用正则表达式ar
for
循环。@MattBurland为什么?奇怪在这种情况下,我会选择
而不是
for
altogether@tnw:有两个原因。首先,请参见。在顺序很重要的情况下,不应使用它。其次,它将迭代您可能不期望的属性。与从prototype继承的属性类似,除非是y您可以检查
hasOwnProperty
@alvarontoro:或者在找到匹配项后,您至少应该
for
循环中中断
。接受以下讨论的最佳答案(使用
break
和普通
for
循环)接受以下讨论的最佳答案(对于
循环使用
break
和normal
)您应该让人们知道这是即将发布的标准,该标准尚未定稿,需要在大多数浏览器中进行填充。无论哪种方式,为什么不使用ES5的
。some()
相反?这会更有意义,因为无论如何都需要布尔结果。@sqint谢谢,我没有注意到OP want是一个布尔结果。我会更新我的答案。你应该让人们知道这是来自即将发布的标准,该标准尚未最终确定,需要在大多数浏览器中填充。无论如何,为什么不使用ES5的
 .some()
?这会更有意义,因为无论如何都需要一个布尔结果。@sqint谢谢,我没有注意到OP want是一个布尔结果。我会更新我的答案。
var search = 1;
var found = numeric.findIndex(function(n) {return n.value == search});
var found = numeric.some(function(n) {return n.value == search;});