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

思路:

  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. Spark-源码-Spark-Submit 任务提交

    Spark 版本:1.3 调用shell, spark-submit.sh args[] 首先是进入 org.apache.spark.deploy.SparkSubmit 类中调用他的 main() ...

  2. SpringBoot学习(1)

    springboot的自动配置功能,主要流程如下: 1 启动的时候加载我们的主配置类,也就是我们的入口类:从而开启我们的自动配置配置功能,这个是通过@EnableAutoConfiguration注解 ...

  3. STM32CubeMx配置SPI注意的一个问题

    这样配置SPI引脚 然后这样配置SPI参数 生成立这样的配置代码 /* SPI2 init function */static void MX_SPI2_Init(void){ /* SPI2 par ...

  4. python循环,函数

    平常的网页会转换成ascll码,在转编译成十六进制a='http://www.mywebsit.com/?query=python&count=20'print(a)b=a.replace(' ...

  5. python2.7入门---变量类型&案例

      这篇文章呢,主要是用来记录python中的变量类型学习内容的.接下来就来看一下变量类型,那么什么是变量呢.变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解 ...

  6. Unity5.6偶尔不能创建项目解决办法

    Unity5.6偶尔启动后,不能创建项目,解决办法如下: 1.打开Unity 2.在开始窗口退出当前登录的账户 3.重新登录 4.然后就可以创建新项目了 5.如果以上方法不生效,关闭Unity再重试一 ...

  7. IDEA的terminal设置成Linux的终端一样

    方式一:通过在Windows上安装Linux命令行工具 前提:需要安装Linux终端的命令行工具,并且最好可以安装 Gow (一个Windows下模拟Linux命令行工具集合,它集成了 Liunx 环 ...

  8. C++学习007-使用exit退出进程

    使用exit可以实现退出当前进程. 如下 在程序接收到一个字符后,就退出进程 编写环境 vs2015 int main() { int a = 10, b = 20; std::cout <&l ...

  9. python+UIAutomation+libary

    #! /usr/bin/env python#Author: XIE TIAN# -*- coding:utf8 -*-from __future__ import unicode_literalsi ...

  10. Python网络编程(进程池、进程间的通信)

    线程池的原理:        线程池是预先创建线程的一种技术.线程池在还没有任务到来之前,        创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,        即均为启动,不消 ...