比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。
换言之,返回两个数组的差异。
这是一些对你有帮助的资源:
Comparison Operators
Array.slice()
Array.filter()
Array.indexOf()
Array.concat()
验证条件
-
diff([1, 2, 3, 5], [1, 2, 3, 4, 5])
应该返回一个数组。 -
["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]
应该返回["pink wool"]
。 -
["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]
应该返回["diorite", "pink wool"]
。 -
["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"]
应该返回[]
。 -
[1, 2, 3, 5], [1, 2, 3, 4, 5]
应该返回[4]
。 -
[1, "calf", 3, "piglet"], [1, "calf", 3, 4]
应该返回["piglet", 4]
。 -
[], ["snuffleupagus", "cookie monster", "elmo"]
应该返回["snuffleupagus", "cookie monster", "elmo"]
。 -
[1, "calf", 3, "piglet"], [7, "filly"]
应该返回[1, "calf", 3, "piglet", 7, "filly"]
。
代码
function diff(arr1, arr2) {
var newArr = [];
// Same, same; but different.
var a1 = [];
for(var i=0;i< arr1.length;i++){
if(arr2.indexOf(arr1[i]) ==-1){
newArr.push(arr1[i]);
}
}
for(var index=0; index < arr2.length;index++){
if(arr1.indexOf(arr2[index]) ==-1){
a1.push(arr2[index]);
}
}
return a1.concat(newArr);
}
diff(["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]);
其它方法
function diff(arr1, arr2) {
var newArr = [];
// Same, same; but different.
newArr = arr1.filter(function(v){
return arr2.indexOf(v) == -1;
}).concat(arr2.filter(function(v){
return arr1.indexOf(v) == -1;
}));
return newArr;
}
diff([1, "calf", 3, "piglet"], [1, "calf", 3, 4]);
es6
function diff(arr1, arr2) {
var newArr = [];
// Same, same; but different.
newArr = arr1.filter( (v) => {
return arr2.indexOf(v) == -1;
}).concat( arr2.filter( (v) => {
return arr1.indexOf(v) == -1;
}));
return newArr;
}
diff([1, "calf", 3, "piglet"], [7, "filly"]);