FCC(ES6写法) Symmetric Difference

建立一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) ( or )数组.javascript

给出两个集合 (如集合 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}).java

 

思路:git

1.用arguments取出全部数组并去重。github

2.用循环遍历前一个数组,若是在后一个数组中找到相同参数,就在后一个数组中删掉这个参数,没找到就添加到后一个数组,返回后一个数组,重复这样的操做。数组

3.最后返回最后一个数组便可。app

 

function sym() {
  let arr = [];
  for(let v of arguments){
    arr.push([...new Set(v)]);
  }
  arr.reduce((a,b) => {
    a.forEach(v => b.indexOf(v) === -1 ? b.push(v) : b.splice(b.indexOf(v),1));
    return b;
  });
  return arr[arr.length - 1];
}
sym([1, 2, 2, 3], [5, 2, 1, 4]); 

  

若是有不明白的地方请留言,若是有更好更简便更优化的方法请留言,谢谢。函数

 

更多内容请访问个人我的博客: Bblog优化

相关文章
相关标签/搜索