查找是否某些东西在数组中或不在javascript中

时间:2018-08-22 20:52:11

标签: javascript arrays indexof

我正在使用Javascript查找数组中是否包含某些内容,但是当我使用此代码时,它根本不会发出任何警报,这意味着它无法正常工作。我在做什么错了?

var theArray = new Array("one","two","three");

if (theArray.indexOf("one")) { alert("Found it!"); }
if (!theArray.indexOf("four")) { alert("Did not find it!"); }

7 个答案:

答案 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)

您认为这可能有效,不是吗?但是这里有两个陷阱。

  1. .indexOf()返回找到的第一个匹配元素的索引,如果找不到任何内容,则返回-1。请记住,JavaScript数组的索引为零,这意味着第一个数组元素的索引为零。因此,如果match是第一个元素,则零是返回值,并且像大多数语言一样,当您希望它为true时,零表示false。但是,这使我们指向了第二点。

  2. .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!"); }