创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(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; }