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)才理解题意…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅月星回

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值