偵測步驟:1、將兩個數組都轉換為set類型,語法「new Set(arr)」;2、取得兩個集合的交集,語法「new Set([...set1].filter (x=>set2.has(x)))”,交集元素會被包含在一個set集合中返回;3、將包含交集元素的set集合轉為數組類型,語法“Array.from(rse)” ;4.判斷交集數組是否為空數組,如果是則沒有相同項,反之則有相同項。
本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
偵測兩個陣列是否有相同項,就是偵測兩個陣列是否有交集。
偵測想法:
取得兩個陣列的交集
判斷該交集是否為空,如果為空則沒有相同項,如果不為空則有相同項。
實作步驟:
#1、取得兩個陣列的交集
在es6中,可以利用set物件的has() 方法來配合陣列的filter()來求兩個陣列的交集。
Set是ES6新提供的資料結構,類似數組,但是本身沒有重複值。利用這個特性,我們可以將陣列轉換為Set類型進行去重,然後使用Array.from方法將其再轉為陣列。
Set has() 方法指示 Set 物件是否包含指定的值。如果指定的值存在,則傳回真,否則傳回假。
註:想要使用has()方法,需要先將陣列轉換成set集合類型
let a=[1, 2, 3]; let b=[3, 5, 2]; newA = new Set(a); newB = new Set(b); let intersectionSet = new Set([...newA].filter(x => newB.has(x))); console.log(intersectionSet);
可以看出此時,交集元素被包含在一個set集合中傳回
2、將包含交集元素的set集合轉為陣列類型
在es6中,可以利用Array.from方法將集合轉換為陣列類型
Array.from方法用於將兩類物件轉換為真正的陣列:類似陣列的物件(array-like object)和可遍歷(iterable)的物件(包括ES6 新增的資料結構Set 和Map)。
let intersectionSet = Array.from(new Set([...newA].filter(x => newB.has(x)))); console.log(intersectionSet);
3、判斷交集數組是否為空數組
如果為空數組,則沒有相同項目
如果不為空數組,則有相同項目
if(intersectionSet==[]){ console.log("没有相同项"); }else{ console.log("有相同项"); }
完整程式碼範例:
let a=[1, 2, 3]; let b=[3, 5, 2]; console.log(a); console.log(b); newA = new Set(a); newB = new Set(b); let intersectionSet = Array.from(new Set([...newA].filter(x => newB.has(x)))); console.log("两个数组的交集:"); console.log(intersectionSet); if(intersectionSet==[]){ console.log("没有相同项"); }else{ console.log("有相同项"); }
【相關推薦:javascript影片教學、程式設計影片】
#以上是es6怎麼偵測兩個陣列是否有相同項的詳細內容。更多資訊請關注PHP中文網其他相關文章!