我正在使用Javascript查找数组中是否包含某些内容,但是当我使用此代码时,它根本不会发出任何警报,这意味着它无法正常工作。我在做什么错了?
var theArray = new Array("one","two","three");
if (theArray.indexOf("one")) { alert("Found it!"); }
if (!theArray.indexOf("four")) { alert("Did not find it!"); }
答案 0 :(得分:2)
您应该将includes
函数用作:
if (theArray.includes('one')) { alert("Found it!"); }
答案 1 :(得分:2)
请记住,数组的起始索引为0
。
来自the docs。
indexOf()方法返回给定元素的第一个索引 可以在数组中找到;如果不存在,则为-1。
one
的索引是0
,这是虚假的,因此第一次检查将失败。如果没有匹配项,indexOf
将返回-1
,因此您应明确检查。
var theArray = new Array("one","two","three");
if (theArray.indexOf("one") !== -1) { alert("Found it!"); }
if (theArray.indexOf("four") === -1) { alert("Did not find it!"); }
答案 2 :(得分:1)
这是因为indexOf
返回一个数字,它是匹配字符串的索引,如果该字符串不存在于数组中,则返回-1。您需要将返回值与以下数字进行比较:
if (thisArray.indexOf('one') > -1) { alert('Found it!') }
if (thisArray.indexOf('four') > -1) { alert('Did not find it') }
如果愿意,可以使用includes
返回一个布尔值。
if (thisArray.includes('one')) { alert('Found it!') }
答案 3 :(得分:1)
您可以使用bitwise NOT ~
运算符并检查返回的索引的值;如果找不到,则检查-1
的值。
~
是bitwise not operator。它非常适合与indexOf()
一起使用,因为indexOf
返回是否找到了索引0 ... n
,如果找不到则返回-1
:value ~value boolean -1 => 0 => false 0 => -1 => true 1 => -2 => true 2 => -3 => true and so on
var theArray = new Array("one", "two", "three");
if (~theArray.indexOf("one")) {
console.log("Found it!");
}
if (!~theArray.indexOf("four")) {
console.log("Did not find it!");
}
答案 4 :(得分:1)
您认为这可能有效,不是吗?但是这里有两个陷阱。
.indexOf()
返回找到的第一个匹配元素的索引,如果找不到任何内容,则返回-1
。请记住,JavaScript数组的索引为零,这意味着第一个数组元素的索引为零。因此,如果match是第一个元素,则零是返回值,并且像大多数语言一样,当您希望它为true时,零表示false。但是,这使我们指向了第二点。
.indexOf()
使用strict equality或换句话说===
执行比较。返回的值不会像您使用true == 1
那样被强制。这在这里非常相关,因为如果它不使用严格相等,那么它找到的任何元素(第一个元素除外)都将具有一个或更高的索引,然后您的比较将成功。例如,if (theArray.indexOf("two"))
可以工作,因为该元素的索引为1
。但是,单个indexOf()
进行严格的相等性检查,它将失败。这就是为什么您需要将返回的indexOf()
与通常为> -1
的值进行显式比较的原因。
答案 5 :(得分:1)
线性搜索。这是一种“语言不可知”的方法,用于解决搜索无序列表的问题。是的,您可以使用function contains(array, value) {
// Loop through the entire array
for (let i = 0; i < array.length; i++) {
// Return true on first match
if (array[i] === value)
return true
}
// Return false on no match
return false
}
// Make an array
let a = ['one', 'two', 'three']
// If it has an element, notify
if (contains(a, 'one'))
alert('found it')
,它是JavaScript特有的整洁的单线性 。但是,这似乎是您不熟悉JavaScript的编程新手,并且在利用一些使生活变得更轻松的精美工具之前,值得自己实施这些工具,以便您真正了解引擎盖,更重要的是,它为什么起作用。
show version
答案 6 :(得分:0)
使用includes()
!
var theArray = new Array("one","two","three");
if (theArray.includes("one")) { alert("Found it!"); }
if (!theArray.includes("four")) { alert("Did not find it!"); }