比較兩個數組,然后返回一個新數組,該數組的元素為兩個給定數組中所有獨有的數組元素。換言之,返回兩個數組的差異。
我們會用到以下三個數組內置的方法函數:
- Array.filter() 過濾器,括號里可以放回調函數,回返的結果是一個新的數組。
- Array.indexOf() 方法可返回某個指定的字符串值在字符串中首次出現的位置。
-
注釋:indexOf() 方法對大小寫敏感!
注釋:如果要檢索的字符串值沒有出現,則該方法返回 -1。
- Array.concat() 拼接 兩個數組,返回結果是一個新的數組。
思路:
將兩個數組合arr1和arr2合並得到新的數組arr3。如果元素在arr3中存在,但是不在arr1或arr2中出現,那么這個元素就是兩個數組中不同的元素。最后使用filter()方法將這些不同的元素保存在newArr中。
function diff(arr1, arr2) { var newArr = []; var arr3=arr1.concat(arr2);//將arr1和arr2合並為arr3 function isContain(value){ //找出arr3中不存在於arr1和arr2中的元素 return arr1.indexOf(value)==-1||arr2.indexOf(value)==-1; } newArr = arr3.filter(isContain); return newArr; }
后面換了中思路,改良了下和縮寫,似乎減少了很多代碼,只需三行
思路:
1.先用第一個數組和第二個數組比較差異,將差異值賦值到一個新的數組;
2.再用第二個數組和第一個數組比較差異,再次賦值給一個另外的新的數組;
3.之后將兩個新數組拼接返回;
PS:
value=>arr2.indexOf(value)==-1 等同於function (value){return arr2.indexOf(value)==-1}
(這里是使用箭頭匿名函數 忘了可以百度搜下)
function diff(arr1, arr2) {
var newArr1=arr1.filter(value=>arr2.indexOf(value)==-1);
var newArr2=arr2.filter(value=>arr1.indexOf(value)==-1);
return newArr1.concat(newArr2); }