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}).

 

重点:

  1. 找两数组之间互相都没有的数   组成新的数组就是需要得到的值   如:【2,3,4】【4,5,6】   得 【2,3,5,6】
  2. 若参数数组有3或者n个  , 则在已得到两个数组的结果【2,3,5,6】 与下一个数组比较  再得到新的数组

代码如下:

function sym(args) {
  var arr = [];
  for (var i = 0; i < arguments.length; i++) {
      arr.push(arguments[i]);
  }
  /* 找两数组之间差异的数 【2,3,4】【3,5,6】  得  【2,4,5,6】*/
  var arg = arr.reduce(function(one ,  two , index , array){
      var a = one.filter(function(d){    //抛出数组1在数组2中找不到的数   给新数组a
          return two.indexOf(d) == -1;
      });
      var b = two.filter(function(d){    //抛出数组2在数组1中找不到的数 给新数组b
          return one.indexOf(d) == -1;
      });
      return a.concat(b);  //将两数组结合,得到我们想要的结果
  });
  // 去重
  arg = arg.filter(function(item,index){
      return arg.indexOf(item) == index;
  });
  return arg;
}

 

posted on 2018-01-11 13:16  辣条菌的思维屋i  阅读(337)  评论(0编辑  收藏  举报