比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。
我们会用到以下三个数组内置的方法函数:
- 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); }