要求
创建一个函数,接受两个或多个数组,返回所给数组的对等差分(symmetric difference)(△or⊕)数组.
例如:
"sym([1, 2, 3], [5, 2, 1, 4])应该返回[3, 4, 5].
sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])应该返回[1, 4, 5]."
分析
1.function sym(args)只获取参数中的第一个数组。。。
2.[1, 1, 2, 5]当做[1, 2, 5]算,因此需要一个去重函数;
3.检查后一个数组里的元素若出现在前一个数组,则移除前一个数组的元素,否则,添加至前一个数组。
解决
function sym(args){
var a=Array.from(arguments);
a=a.reduce(function(prev, curv, index, array){
var a = prev.filter(function(item){
return curv.indexOf(item) < 0;
});
var b = curv.filter(function(item){
return prev.indexOf(item) < 0;
});
return a.concat(b);
});
return a.filter(function(item,index,array){
return array.indexOf(item) == index;
});
}