FCC 中级算法题 比较两个数组

Diff Two Arrays

比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。言之,返回两个数组的差异。

ComparisonOperators

Array.slice()

Array.filter()

Array.indexOf()

Array.concat()

思路:

先找出arr1中与arr2不同的部分组成新数组1,再找出arr2中与arr1不同的部分组成新数组2,在将这两个数组合并,得出两个数组不同的部分。

知识点:

(1)var newArr=arr.filter(func);

filter函数可以筛选出可以使func函数返回true的元素并组成一个新的数组,func函数默认value值为数组中的单个元素;

1  var newArr1 = arr1.filter(comp1);
2  var newArr2 = arr2.filter(comp2); 

(2)arr.indexOf(value)===-1;

indexOF函数可以对数组进行查找,如果能在数组arr中找到value,则后面返回的数字是value值在arr中的索引;

1  function comp1(value) {
2         if (arr2.indexOf(value) === -1) {
3             return true;
4         }
5     }

(3)newArr = newArr1.concat(newArr2);

concat函数可以实现两个数组的组合,newArr1和newArr2的首尾相接形成新的数组。

1 newArr = newArr1.concat(newArr2);

代码:

 1 function diff(arr1, arr2) {
 2     var newArr = [];
 3 
 4     function comp1(value) {
 5         if (arr2.indexOf(value) === -1) {
 6             return true;
 7         }
 8     }
 9 
10     function comp2(value) {
11         if (arr1.indexOf(value) === -1) {
12             return true;
13         }
14     }
15     var newArr1 = arr1.filter(comp1);
16     var newArr2 = arr2.filter(comp2);
17     newArr = newArr1.concat(newArr2);
18     return newArr;
19 }
20 diff(
21     ["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]);
原文地址:https://www.cnblogs.com/lailailee/p/7267826.html