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…来迭代数组。请使用正则表达式arfor
循环。@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;});