創建一個函數,接受兩個或多個數組,返回所給數組的 對等差分(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}
).
當你遇到困難的時候,記得查看錯誤提示、閱讀文檔、搜索、提問。
這是一些對你有幫助的資源:
本題我的思路是用一個空數組和第一個參數求對差等分數組,求得的對差等分數組和第二個參數求對差等分數組,並在每個參數求對差等分前做去重處理
function sym() { if(arguments.length<2) return false; var result=[],i,j,k,m; var check=[]; var common=[]; var union=[]; for(i=0;i<arguments.length;i++){ check=[]; for(j=0;j<arguments[i].length;j++){ if(check.indexOf(arguments[i][j])===-1){ check.push(arguments[i][j]); } } //去重 common=[]; for(k=0;k<result.length;k++){ if(check.indexOf(result[k])!==-1){ common.push(result[k]); } } //兩數組共有的元素 union=result.concat(check); result=[]; for(m=0;m<union.length;m++){ if(common.indexOf(union[m])==-1){ result.push(union[m]); } } //對差等分元素 console.log(result); } return result; }
或者用filter()方法也可以實現
function sym() { var result=[],i; var check=[]; for(i=0;i<arguments.length;i++){ check=arguments[i].filter(function(ele,index,arr){ return arr.indexOf(ele)===index; }); //去重 result=result.concat(check).filter(function(v){ return result.indexOf(v)===-1||check.indexOf(v)===-1; }); //對差等分元素 } return result; }