数组去重复是一个常见的需求,我们暂时考虑同类型的数组去重复。主要是理清思路和考虑下性能。以下方法,网上基本都有,这里只是简单地总结一下。

思路:

  1. 遍历数组,一一比较,比较到相同的就删除后面的
  2. 遍历数组,一一比较,比较到相同的,跳过前面重复的,不相同的放入新数组
  3. 任取一个数组元素放入新数组,遍历剩下的数组元素任取一个,与新数组的元素一一比较,如果有不同的,放入新数组。
  4. 遍历数组,取一个元素,作为对象的属性,判断属性是否存在

1. 删除后面重复的:

1 function ov1(arr){
2     //var a1=((new Date).getTime())
3     for(var i=0;i<arr.length;i++)
4         for(var j=i+1;j<arr.length;j++)
5             if(arr[i]===arr[j]){arr.splice(j,1);j--;}           
6     //console.info((new Date).getTime()-a1)               
7     return arr.sort(function(a,b){return a-b});
8 }

2. 这个是常规的方法,比较好理解,如果相同则跳出循环

01 function ov2(a) {
02     //var a1=((new Date).getTime())
03     var b = [], n = a.length, i, j;
04     for (i = 0; i < n; i++) {
05         for (j = i + 1; j < n; j++)
06             if (a[i] === a[j]){j=false;break;}
07         if(j)b.push(a[i]);
08         }
09     //console.info((new Date).getTime()-a1)   
10     return b.sort(function(a,b){return a-b});
11 }

3. 这个我花了好长时间明白的,这里j循环虽然继续了,但是i值已经改变了。就等于是一个新的i循环:

01 function ov3(a) {
02     //var a1=((new Date).getTime())
03     var b = [], n = a.length, i, j;
04     for (i = 0; i < n; i++) {
05         for (j = i + 1; j < n; j++)
06         if (a[i] === a[j])j=++i
07     b.push(a[i]);}
08     //console.info((new Date).getTime()-a1)   
09     return b.sort(function(a,b){return a-b});
10 }    

4. 保证新数组中的都是唯一的

01 function ov4(ar){
02 //var a1=((new Date).getTime())
03     var m=[],f;
04     for(var i=0;i<ar.length;i++){
05     f=true;
06     for(var j=0;j<m.length;j++)
07     if(ar[i]===m[j]){f=false;break;};
08     if(f)m.push(ar[i])}
09 //console.info((new Date).getTime()-a1)   
10     return m.sort(function(a,b){return a-b});
11 }

5. 用对象属性

1 function ov5(ar){
2 //    var a1=(new Date).getTime()
3         var m,n=[],o= {};
4         for (var i=0;(m= ar[i])!==undefined;i++)
5         if (!o[m]){n.push(m);o[m]=true;}
6 //    console.info((new Date).getTime()-a1)   
7     return n.sort(function(a,b){return a-b});;
8     }

JavaScript几种数组去掉重复值的方法的更多相关文章

  1. PHP 二维数组去掉重复值并保持原结构

    PHP 二维数组去掉重复值并保持原结构 直接上代码,解释很详细 //二维数组去掉重复值 function arrunique($a){ foreach($a[0] as $k => $v){ / ...

  2. 字符串数组(String []) 去掉重复值的方法

    public class Demo { /** * 去掉重复值 */ public static void main(String[] args) { String test = "100, ...

  3. JS去除数组中重复值的四种方法

    JS去除数组中重复值的四种方法 1 /// <summary>            o[this[i]] = "";  }      }       newArr.p ...

  4. PHP如何去掉多维数组的重复值

    1.定义函数 function array_unique_new($arr){ $t = array_map('serialize', $arr);//利用serialize()方法将数组转换为以字符 ...

  5. JS数组去掉重复元素

    JS数组去掉重复元素,这里提供3中写法. var arr =[1,2,3,4,5,6,3,4,7,2,4,1,8]; 输出:[1,2,3,4,5,6,7,8]; 1.使用indexOf() arr.i ...

  6. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  7. php 检查该数组有重复值

    if (count($array) != count(array_unique($array))) { echo '该数组有重复值'; }

  8. JavaScript移除数组元素减少长度的方法

    JavaScript移除数组元素减少长度的方法,代码如下: //数组移除长度方法 var array=[];  array[0]="张三";  array[1]="李四& ...

  9. php 获取数组第一个值的方法分享

    以下是对使用php实现获取数组第一个值的方法进行了详细的分析介绍,需要的朋友可以过来参考下 reset (PHP 3, PHP 4, PHP 5)reset -- 将数组的内部指针指向第一个单元 说明 ...

随机推荐

  1. 3D Food Printing【3D食物打印】

    3D Food Printing There's new frontier in 3D printing that's begining to come into focus: food. 3D打印的 ...

  2. Manacher(马拉车)学习笔记

    Manacher可以有效的在\(O(n)\)时间内解决一个字符串的回文子串的题目 目录 简介 讲解 推介 简单的练习 恐怖的练习QAQ 小结 简介 开头都说了,Manacher是目前解决回文子串的最有 ...

  3. 如何在windows“我的电脑”中添加快捷文件夹

    如图所示,windows中打开“我的电脑”时,原来有6个默认的文件夹,访问非常便捷,自己想再增加,可以使用“ThisPCTweaker”即可完成 操作如下图,不多解释,简单操作: 文件下载:http: ...

  4. 初步学习pg_control文件之十三

    接前文,初步学习pg_control文件之十二 看这个: * backupStartPoint is the redo pointer of the backup start checkpoint, ...

  5. P1794 装备运输_NOI导刊2010提高(04)

    P1794 装备运输_NOI导刊2010提高(04) 题目描述 德国放松对英国的进攻后,把矛头指向了东边——苏联.1943年初,东线的战斗进行到白热化阶段.据可靠情报,90余万德国军队在库尔斯克准备发 ...

  6. MQTT 开源代理mosquitto的网络层封装相当sucks

    最近学习MQTT协议,选择了当前比较流行的MQTT Broker “mosquitto”,但是在阅读代码过程中发现其网络底层库封装的相当差劲. 对于MQTT协议的变长头长度的读取上,基本上采取每次一个 ...

  7. Eclipse+APKTool动态调试APK

    1. 所需工具 Eclipse. Apktool v2.0.6. 安卓SDK工具. 2. 重编译APK apktool d -d -o test test.apk 此时当前test目录下就是apkto ...

  8. 「日常训练」Phone Numbers (CFR466D2C)

    题意(Codeforces 940C) 给定一字符串,求比它字典序大的字符串.限定其长度,并且只能用原串的字母. 分析 考虑原串长度lorigin与给定的长度lgiven.若给定长度大于原串长度,直接 ...

  9. Windows下nginx作为静态资源服务器使用

    一.Nginx下载与安装 1.nginx官方下载地址:http://nginx.org/ 2.下载完后将压缩包解压即可 3.nginx配置文件为根目录下conf\nginx.conf 二.Nginx常 ...

  10. JAVA虚拟机(一):内存区域

    根据<java虚拟机规范第二版>规定,现阶段的java内存区域总体如下图 其中,方法区和堆是所有线程共享区域. 虚拟机栈,本地方法栈,程序计数器是各线程独占. 概述一下各个区域 先说说线程 ...