文档章节

对差等分

万城
 万城
发布于 2017/08/29 10:36
字数 857
阅读 2
收藏 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]);

 

 

 

© 著作权归作者所有

共有 人打赏支持
万城
粉丝 1
博文 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
05/26
0
0
redis之sets类型及操作

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

乾坤刀
06/03
0
0
Redis学习笔记~Redis提供的五种数据结构

分布式缓存,消息队列,替代Session呵呵(Session太不稳定了,呵呵)=Redis Redis的崛起绝非偶然,它确实有自己的新东西在里面,它不像Memcached,只能将数据存储在内存中,它提供了持久化机...

mcy247
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos安装confluence全攻略

https://blog.csdn.net/qwer026/article/details/51439076

happyeveryday32
17分钟前
2
0
30 行 Javascript 代码搞定智能家居系统

本文首发于『阿里云 IoT 开发者社区』,更多精彩物联网内容欢迎前往浏览。 智能家居可谓是今年物联网的热门领域,通过智能单品和智能音箱,人们已然把『智能』两个字变成了生活的理所应当。搭...

阿里云官方博客
20分钟前
2
0
sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
28分钟前
1
0
HIVE数据倾斜总结

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,...

瑞查德-Jack
39分钟前
0
0
Pure-ftpd搭建FTP

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 使用pure-ftpd搭建FTP服务 轻量的ftp软件 安装pure-ftpd并修改配置文件 # pure-ftpd为epel扩展库里的软件[root...

robertt15
48分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部