數組的includes操作


數組實例的 includes()

 

Array.prototype.includes方法返回一個布爾值,表示某個數組是否包含給定的值,與字符串的includes方法類似。ES2016 引入了該方法。

[1, 2, 3].includes(2) // true [1, 2, 3].includes(4) // false [1, 2, NaN].includes(NaN) // true

該方法的第二個參數表示搜索的起始位置,默認為0。如果第二個參數為負數,則表示倒數的位置,如果這時它大於數組長度(比如第二個參數為-4,但數組長度為3),則會重置為從0開始。

[1, 2, 3].includes(3, 3); // false [1, 2, 3].includes(3, -1); // true

沒有該方法之前,我們通常使用數組的indexOf方法,檢查是否包含某個值。

if (arr.indexOf(el) !== -1) { // ... }

indexOf方法有兩個缺點,一是不夠語義化,它的含義是找到參數值的第一個出現位置,所以要去比較是否不等於-1,表達起來不夠直觀。二是,它內部使用嚴格相等運算符(===)進行判斷,這會導致對NaN的誤判。

[NaN].indexOf(NaN) // -1

includes使用的是不一樣的判斷算法,就沒有這個問題。

[NaN].includes(NaN) // true

下面代碼用來檢查當前環境是否支持該方法,如果不支持,部署一個簡易的替代版本。

const contains = (() => Array.prototype.includes ? (arr, value) => arr.includes(value) : (arr, value) => arr.some(el => el === value) )(); contains(['foo', 'bar'], 'baz'); // => false

另外,Map 和 Set 數據結構有一個has方法,需要注意與includes區分。

  • Map 結構的has方法,是用來查找鍵名的,比如Map.prototype.has(key)WeakMap.prototype.has(key)Reflect.has(target, propertyKey)
  • Set 結構的has方法,是用來查找值的,比如Set.prototype.has(value)WeakSet.prototype.has(value)

 let a = new Set([1, 2, 3]);

let b = new Set([3, 5, 2]);

// 並集 let unionSet = new Set([...a, ...b]); //[1,2,3,5]

// 交集 let intersectionSet = new Set([...a].filter(x => b.has(x))); // [2,3]

// ab差集 let differenceABSet = new Set([...a].filter(x => !b.has(x)));

let different=this.lastList.filter(x=>!val.includes(x));

some() 方法測試數組中的某些元素是否通過由提供的函數實現的測試。

注意:對於放在空數組上的任何條件,此方法返回false

var array = [1, 2, 3, 4, 5];

var even = function(element) {
// checks whether an element is even
return element % 2 === 0;
};

console.log(array.some(even));
// expected output: true

 

描述

some 為數組中的每一個元素執行一次 callback 函數,直到找到一個使得 callback 返回一個“真值”(即可轉換為布爾值 true 的值)。如果找到了這樣一個值,some 將會立即返回 true。否則,some 返回 falsecallback 只會在那些”有值“的索引上被調用,不會在那些被刪除或從來未被賦值的索引上調用。

callback 被調用時傳入三個參數:元素的值,元素的索引,被遍歷的數組。

如果為 some 提供了一個 thisArg 參數,將會把它傳給被調用的 callback,作為 this 值。否則,在非嚴格模式下將會是全局對象,嚴格模式下是 undefined

some 被調用時不會改變數組。

some 遍歷的元素的范圍在第一次調用 callback. 時就已經確定了。在調用 some 后被添加到數組中的值不會被 callback 訪問到。如果數組中存在且還未被訪問到的元素被 callback 改變了,則其傳遞給 callback 的值是 some 訪問到它那一刻的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM