題目:數組
建立一個函數,接受兩個或多個數組,返回所給數組的 對等差分(symmetric difference) (△
or ⊕
)數組.app
給出兩個集合 (如集合 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}
).函數
當你遇到困難的時候,記得查看錯誤提示、閱讀文檔、搜索、提問。spa
這是一些對你有幫助的資源:code
1 function sym(args) { 2 3 var arr = []; 4 5 //把變量放在一個數組裏 6 for(var i=0; i<arguments.length; i++) { 7 arr.push(arguments[i]); //[[1,2,3],[5,2,1,4]] 8 } 9 10 //找出只在各自集合中的元素 11 var temp = arr.reduce(function(prev,cur,index,array) { 12 //返回prev中cur沒有的元素 13 var onlyInPrev = prev.filter(function(item){ 14 return cur.indexOf(item) === -1; //[3] 15 }); 16 //返回cur中prev沒有的元素 17 var onlyInCur = cur.filter(function(item){ 18 return prev.indexOf(item) === -1; //[5,4] 19 }); 20 //合併 21 return onlyInPrev.concat(onlyInCur); 22 }); 23 24 //return temp; 25 //去掉重複的數字 26 return temp.filter(function(item,index,array){ 27 return array.indexOf(item) === index; 28 }); 29 30 } 31 32 sym([1, 2, 3], [5, 2, 1, 4]);
sym([1, 2, 3], [5, 2, 1, 4])
應該返回
[3, 4, 5]
.
sym([1, 2, 3], [5, 2, 1, 4])
應該只包含三個元素.
sym([1, 2, 5], [2, 3, 5], [3, 4, 5])
應該返回
[1, 4, 5]
sym([1, 2, 5], [2, 3, 5], [3, 4, 5])
應該只包含三個元素.
sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])
應該返回
[1, 4, 5]
.
sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])
應該只包含三個元素.
sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3])
應該返回
[2, 3, 4, 6, 7]
.
sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3])
應該只包含五個元素.
sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3], [5, 3, 9, 8], [1])
應該返回
[1, 2, 4, 5, 6, 7, 8, 9]
.
sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3], [5, 3, 9, 8], [1])
應該只包含八個元素.