3 回答

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
ECMAScript 2016采用了includes()
一種專門解決問題的陣列方法,因此現(xiàn)在是首選方法。
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(1, 2); // false (second parameter is the index position in this array at which to begin searching)
截至2018年7月,幾乎所有主流瀏覽器都已實(shí)現(xiàn),如果您需要支持IE,則可以使用polyfill。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
碼:
function isInArray(value, array) { return array.indexOf(value) > -1;}
執(zhí)行:
isInArray(1, [1,2,3]); // true
更新(2017年):
在遵循ECMAScript 2016(ES7)標(biāo)準(zhǔn)的現(xiàn)代瀏覽器中,您可以使用函數(shù)Array.prototype.includes,這樣可以更容易地檢查數(shù)組中是否存在項(xiàng):
const array = [1, 2, 3];const value = 1;const isInArray = array.includes(value);console.log(isInArray); // true

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
只需使用indexOf
:
haystack.indexOf(needle) >= 0
如果要支持舊的Internet Explorer(<IE9),則必須包含當(dāng)前代碼作為解決方法。
除非您的列表已排序,否則您需要將每個(gè)值與針進(jìn)行比較。因此,您的解決方案indexOf
都必須n/2
平均執(zhí)行比較。但是,由于它indexOf
是一種內(nèi)置方法,它可能會(huì)使用額外的優(yōu)化,并且在實(shí)踐中會(huì)稍微快一些。請(qǐng)注意,除非您的應(yīng)用程序經(jīng)常在列表中搜索(例如每秒1000次)或列表很大(例如100k條目),否則速度差異無關(guān)緊要。
添加回答
舉報(bào)