JS 不使用 for forEach 獲取兩陣列中重複的元素

xggllc發表於2020-10-01

hi, 小夥伴們,好久不見噢~

今天分享一個小功能,工作中遇到Check表格中重複欄位名的需求,不想用迴圈的方式,就想了其他實現思路,覺得挺有意思,就分享出來共同探討一下。

isCheck(arr1:any[], arr2:any[]) {
    // 拼接兩個陣列
    let newArr = arr1.concat(arr2);
    // 資料去重
    let noRepetitionArr = [...new Set(newArr)];
    // 如果 去重陣列長度小於原陣列長度,則表示有重複
	if (noRepetitionArr.length < newArr.length) {
        // 獲取陣列中重複的值
	    let defArr = newArr.filter(function(v, i, arr) {
			return arr.indexOf(v) !== arr.lastIndexOf(v);
		});
        // 重複的值再次去重 也可省掉此步驟
		let newdefarr = [...new Set(defArr)];
        return newdefarr;
	}
    return [];
}

let arr1 = [1,2,3,4,5,6,6,6];
let arr2 = [6,7,8,9,10,11,11];

let test = this.isCheck(arr1, arr2);

test 結果為 [6,11]

以下為瀏覽器控制檯執行結果: 

 

相關文章