文档章节

对差等分

万城
 万城
发布于 2017/08/29 10:36
字数 857
阅读 3
收藏 0
function duichadengfen2(args) {
    var arr = [];
for (var i = 0; i < arguments.length; i++) {
    arr.push(arguments[i]); //用数组组成新的数组
    arr[i] = arr[i].filter((function(item,index,array){
        return array.indexOf(item) == index;        //去重,判断索引值是否等于indexOf返回的首次出现的位置,如果不等于就是出现了两次,这样只会返回一个
    }))
}
//下面这个result没用,只是演示用的
var result = arr.filter(function(item,index,array){
        return array.indexOf(item) == index;        //去重,判断索引值是否等于indexOf返回的首次出现的位置,如果不等于就是出现了两次,这样只会返回一个
    });
    /*arr.forEach(function (i) { //删去每个数组项重复的部分
        for (var j = 0; j < i.length - 1; j++) {        //用相邻排序法,这个是第一位k是第二位,所以这个是length-1
            for (var k = j + 1; k < i.length; k++)
                if (i[j] == i[k]) {     //如果相邻两位相等
                    i.splice(j, 1);     //如果相等则删除当前这个元素
                    j--; //重新定位J的位置
                }
        }
    });*/
    arr.reduce(function (prev, cur, index, array) { //归并数组,并且删去后项中相同的项。第一个参数是合并后的数组第二个是当前数组
        prev.forEach(function (m) {         //如果prev里的某个值没在cur里出现,则把这个值push到cur里去
            if (cur.indexOf(m) == -1)
                cur.push(m);
            else cur.splice(cur.indexOf(m), 1);     //如果prev里的某个值在cur里出现过,则删除这个值
        });
        return cur;     //所有的值都存在了cur里,返回就可以了,
    });
    return arr[arr.length - 1];     //reduce会迭代到最后一个数组,所以最后一个数组才是结果
}
duichadengfen2([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

/*

function sym(args) {
  var args1 = arguments[0],
      args2 = arguments[1],
      result = [];
  for (var u=0; u<args1.length; u++){
    if(args2.indexOf(args1[u]) === -1){
      result.push(args1[u]);
    }
  }
  for (var i=0; i<args2.length; i++){
    if(args1.indexOf(args2[i]) === -1){
      result.push(args2[i]);
    }
  }
  return result;
}

sym([1, 2, 3], [5, 2, 1, 4]);*/
        function sym(args) {
            var arr = [];
            for (var i = 0; i < arguments.length; i++) {
                arr.push(arguments[i]); //用数组组成新的数组
            }
            arr.forEach(function (i) { //删去每个数组项重复的部分
                for (var j = 0; j < i.length - 1; j++) {
                    for (var k = j + 1; k < i.length; k++)
                        if (i[j] == i[k]) {
                            i.splice(j, 1);
                            j--; //重新定位J的位置
                        }
                }

                // console.log(arr);
            });
          /*去重更好的方法
          return temp.filter(function(item,index,array){
             return array.indexOf(item) == index;
             });//自身查重只需要让它本身第一次出现在原数组的位置为索引值index,就可以保留且只保留一个。*/
            // return arr;
            arr.reduce(function (prev, cur, index, array) { //归并数组,并且删去后项中相同的项。
                prev.forEach(function (m) {
                    if (cur.indexOf(m) == -1)
                        cur.push(m);
                    else cur.splice(cur.indexOf(m), 1);
                });
                return cur;
            });

            return arr[arr.length - 1];
        }

        sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

function sym(args) {
  var arrs=[];
  for(var a of arguments){    //es6
    arrs.push(a);
  }
  var res=arrs.reduce(function(a,b){  
    a=del(a);
    b=del(b);  //数组分别处理
    var arr=a.concat(b);   
    return del(arr,true);  //拼接成一个大数组后,再进行一次处理
  });
  
 return res;
}
 
function del(arr,flag){   //排序and去重   flag为true表示删干净,否则留一个
  var start,end;    
  arr.sort(function(a,b){  //数组由小到大排序
    return a-b;
  });
  for(var i=0;i<arr.length;i++){
    if(arr[i]==arr[i+1]){  //发现重复
      start=(start===undefined)?i:start;  //start为重复的起始位置
      end=i+1;           //end为重复的结束位置
    }else{   
      if( end && end==i ){  //如果存在重复,即end有值,按照flag对数组进行处理。
        if( flag ){
          arr.splice(start,end-start+1);
          i=i-(end-start+1);
        }else{
          arr.splice(start,end-start);
          i=i-(end-start);
        }
        start=undefined;  //没有重复了,start要还原
      }      
    }
  }
  
  return arr;
  
}
sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5]);

 

 

 

© 著作权归作者所有

万城
粉丝 2
博文 50
码字总数 99199
作品 0
青岛
前端工程师
私信 提问
iOS 事件记录框架--EventLogger

EventLogger 是 iOS 开发中事件记录框架,方便进行事件统计,包括计数事件与计时事件,如:统计某按钮的点击次数,两个事件发生的时间差等,使用简单。 计数事件: [[EventLogger sharedInst...

YourtionGuo
2015/11/02
188
0
Go 的多元线性回归--regression

regression 是Go 的多元线性回归。 用法举例: 导入安装包,创建一个回归和数据,并添加进去。你可按照你的需要添加变量,下面实例中我们使用三个变量: package mainimport ( "fmt" "github...

匿名
2016/09/18
117
0
小蛇学python(11)初窥numpy

今天我们来学学numpy这个库。重要性自不必说,直接切入主题。 numpy的数组创建方法 其中shape属性表现了这个数组的维度。 numpy还有一些自带的数组创建方法 读者可以自行输入,观看结果,享受...

Data_God
2018/05/26
0
0
寿命计算器测试结果

根据你的个人资料、生活习惯、营养状况、身体状况、家族史,经过科学测试,计算出你的寿命约是: 106岁 你可以将结果 测试结果仅供参考,这个测只是告诉你要从现在开始改变自己,以下是针对你...

晨曦之光
2012/04/24
82
0
redis之sets类型及操作

sets类型及操作 set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中key理解为集合的名字。 set的是通过hash table实现(即set并没有顺...

乾坤刀
2018/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

拥有有趣灵魂的程序员们,程序员访谈(一)

点击上方关注我们,让小care关爱你! 程序员群体一直都是低调多金的代表,而近段时间以来,程序员在网络上除了高薪之外,总是会和屌丝、苦逼、格子衫、没情趣...联系在一起。黑程序员的段子也...

ITCare
今天
14
0
Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
今天
8
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
今天
7
0
spring boot升级到spring cloud

1、先升级spring boot 版本到2.1.3 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEAS......

moon888
今天
12
0
从蓝鲸视角谈DevOps

DevOps源于Development和Operations的组合 常见的定义 DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变...

嘉为科技
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部