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優化

相關文章
相關標籤/搜索