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

 

相关文章: