在開發過程中,經常需要判斷一個值是否在一個數組中出現過。JavaScript語言提供了多種判斷數組中存在元素的方式,下面我們就來詳細介紹一下。
首先最基本的方法就是使用for循環遍歷整個數組,然后逐個比較元素。比如下面這段簡單的代碼:
let arr = [1, 2, 3, 4, 5]; let isExist = false; for(let i = 0; i< arr.length; i++){ if(arr[i] === 3){ isExist = true; break; } } console.log(isExist); // true
其中isExist是用來表示是否存在的布爾類型變量,初始值為false,在循環過程中如果找到了目標元素,就將isExist設置為true,并直接退出循環。如果循環完畢還未找到目標元素,則isExist仍然為false。但是這種方式的效率是比較低的,尤其是在數組很大的情況下,遍歷整個數組需要的時間是比較長的。
另一種方法是使用ES6新增的includes方法,這個方法非常簡單,只需要傳入一個目標元素,即可返回一個布爾類型的值,表示是否包含這個元素。下面是一個例子:
let arr = [1, 2, 3, 4, 5]; console.log(arr.includes(3)); // true
這種方式的效率比較高,而且代碼量也非常少,推薦使用這種方式。
除了includes方法之外,還可以使用indexOf方法,這個方法跟includes的作用幾乎是一樣的,都是判斷某個元素是否在數組中存在,只不過indexOf返回的是元素的下標,如果不存在則返回-1。下面是一個例子:
let arr = [1, 2, 3, 4, 5]; console.log(arr.indexOf(3) !== -1); // true
需要注意的是,這種方式返回的是下標,所以需要跟-1進行比較,而且如果數組中存在多個相同的元素,indexOf只會返回第一個匹配到的下標。
最后,還有一種比較麻煩的方法,就是使用filter方法,這個方法可以對數組進行篩選,返回一個新的數組,而我們只需要判斷新數組的長度是否為1即可。下面是一個例子:
let arr = [1, 2, 3, 4, 5]; console.log(arr.filter((item) =>{ return item === 3; }).length === 1); // true
需要注意的是,這種方式返回的是一個新的數組,所以可能會有性能問題,而且代碼量也比較多,不推薦使用。
綜上所述,判斷一個數組中是否存在某個元素,我們可以使用for循環、includes、indexOf等方法,其中includes方法是比較推薦的方式,因為效率高且代碼簡潔。