Symmetric Difference对等差分

Symmetric Difference
创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组.

给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}), 而数学术语 “对等差分”
的集合就是指由所有只在两个集合其中之一的元素组成的集合(A △ B = C = {1, 4}). 对于传入的额外集合 (如 D = {2,
3}), 你应该安装前面原则求前两个集合的结果与新集合的对等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2,
3, 4}).

思路:
传入n个数组,先将每个数组去重,然后将数组1与数组2去重,得到的结果再与数组3去重

function sym(args) {
  var arr = []; //存放传入的参数
  for(var i = 0; i < arguments.length; i++){
    arr.push(arguments[i]);

    //数组中的每一项分别去重
    arr[i] = arr[i].filter(function(item,index,array){
      return array.indexOf(item,index+1) === -1; //若该元素之后再查不到该元素的位置,表示该元素之后没有与之相同的元素
    });
  }
  var result = arr[0];
  for(var i = 1; i < arr.length; i++){
    result = result.concat(arr[i]);

    result = result.filter(function(item,index,array){
      return array.indexOf(item) === array.lastIndexOf(item);
    }); 

  }

  return result;
}

刚开始对题目理解错误,看了(https://zhuanlan.zhihu.com/p/25359286)才理解题意…

你可能感兴趣的:(FreeCodeCamp)