<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组去重方法</title>
</head>
<body>
<script>

function unique1(arr){
// 遍历数组arr
for(var i = 0, r = []; i < arr.length; i++){
// 遍历数组r
for(var j = 0; j < r.length; j++){
// 如果遍历到r中的元素等于arr中的当前元素退出循环
if(r[j] == arr[i]){
break;
}
}
// 如果遍历到最后没有发现有与arr当前元素相同的元素
if(j == r.length){
// 则把这个元素追加到末尾
r[r.length] = arr[i];
}
}
return r;
}

function unique2(arr){
// 遍历数组arr
for(var i = 0, hash = [], r = []; i < arr.length; i++){
// 如果哈希数组中不存在以arr[i]为下标的变量
if(hash[arr[i]] === undefined){
// 将这个值存入最终数组中
r[r.length] = arr[i];
// 并把该值作为下表存入哈希数组,给一个自定义的值
hash[arr[i]] = 1;
}
}
return r;
}

function unique3(arr){
// 与第二种方式的算法基本一致,因为对象的存储方式在底层就是数组
var obj = {};
// 遍历数组
for(var i = 0, r = []; i < arr.length; i++){
// 在obj中如果不存在以arr的当前值为属性名的属性
if(!obj[arr[i]]){
// 将这个值存入最终数组中
r.push(arr[i]);
// 并把该值作为下表存入哈希数组,给一个自定义的值
obj[arr[i]] = 1;
}
}
return r;
}

/*function unique4(arr){
// 给arr排序
arr.sort(function(a,b){return a-b})
// 遍历数组
for(var i = 1; i < arr.length; i++){
// 如果当前值等于了前面的那个值
if(arr[i] === arr[i-1]){
// 删除这个值
arr.splice(i,1);
// 因为删除了一个值,需要让循环向前移动一次
i--;
}
}
return arr;
}*/

/*function unique5(arr){
// 遍历数组
for(var i = 0; i < arr.length; i++){
// 遍历数组寻找与arr当前值相等的值
for(var j = i + 1; ; ){
// j记录找到的下标
j = arr.indexOf(arr[i], j);
// 如果j为-1了,代表后面没有相同的值了
if(j == -1){
break;
}
// 删除这个值
arr.splice(j, 1);
}
}
return arr;
}*/

function unique6(arr){
// ES6新语法
return new Set(arr);
}

var arr = [5,4,9,1,6,8,7,5,4,2,4,5,6,4,2,6,4,2,1,5,9]
// 测试
console.log(unique1(arr));
console.log(unique2(arr));
console.log(unique3(arr));
// console.log(unique4(arr));
// console.log(unique5(arr));
console.log(unique6(arr));
// 效率测试
for(var i = 0, arrtest = []; i < 10000; i++){
// 随机往数组里面添加10000个数据
arrtest[i] = Math.ceil(Math.random()*100)
}

console.time("unique1");
unique1(arrtest);
console.timeEnd("unique1");
console.time("unique2");
unique2(arrtest);
console.timeEnd("unique2");
console.time("unique3");
unique3(arrtest);
console.timeEnd("unique3");
/*console.time("unique4");
unique4(arrtest);
console.timeEnd("unique4");*/
/*console.time("unique5");
unique5(arrtest);
console.timeEnd("unique5");*/
console.time("unique6");
unique6(arrtest);
console.timeEnd("unique6");
</script>
</body>
</html>

转载于:https://www.cnblogs.com/awei313558147/p/11537194.html

2019.08.30数组去重的几种方法以及所需时间对比相关推荐

  1. java hashmap 去重_java数组去重的两种方法

    我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...

  2. 两个对象数组去重的3种方法

    两个对象数组去重的3种方法 前言 问题描述 解决方案一 解决方案二 解决方案三 前言 前段时间写过JavaScript数组去重最简单的 4 种方案,里面的数组元素是基本类型.本文要讲的数组元素是对象, ...

  3. 数组去重的12种方法总结

    数组去重的11种方法 (1)ES5常用:利用for嵌套for,然后splice去重 function unique(arr) {for (var i = 0; i < arr.length; i ...

  4. java数组去重方法是,java数组去重的两种方法

    我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题.当我们想要不重复元素的数组时,就要再进行一步去重的工作.数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet ...

  5. JavaScript数组去重的五种方法

    JavaScript数组去重的五种方法 先简单准备一个数组,用于方法的实验: let array = [1,1,2,3,4,4,1,5,6,6,7,7,7]; console.log(`去重前的数组: ...

  6. 数组去重--这几种方法够不?

    数组去重,是校招面试的必考知识点.简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个.这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略类类型的判断.所以大家在进行数组 ...

  7. Js中数组去重的几种方法

    前几天在看前端面试题的时候,其中js部分有个问题是实现数组去重的算法,一开始就想了一两种方法,后来仔细回忆了下这个题,觉得该问题实现方法确实不止局限于一两种方法 ,从不同的角度去看待该问题就会有多种实 ...

  8. JS----JavaScript数组去重(12种方法,史上最全)

    数组去重的方法 一.利用ES6 Set去重(ES6中最常用) Set 不包含重复元素的值的集合 Map 双列集合 键值对 与object的区别 : object中的key只能是string类型 而Ma ...

  9. 原生JS数组去重的几种方法

    有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原 ...

最新文章

  1. 安全证书导入到java中的cacerts证书库
  2. C++继承时的对象内存位置(一)有成员变量遮蔽时的内存分布
  3. 关于异或的一些东西和应用
  4. JTA(java telnet/ssh client)不能telnet/ssh远程机器问题与解决
  5. Linux的基础命令和配置文件
  6. 诺奖这么多,经济还崩溃了?
  7. linux从字符界面转入图形界面一法
  8. 7.8 Cound 练习
  9. HTTP 405错误解决方法
  10. HOJ 10027 Longest Ordered Subsequence Extention
  11. 【论文-笔记】软件化雷达显示终端的设计与实现
  12. 跳槽的新公司,我直接让项目的性能提升了一半
  13. 图解 生成对抗网络GAN 原理 超详解
  14. 开源机器人库orocos KDL 学习笔记(五):Inverse Kinematric
  15. 【BYOD】自带设备 资料
  16. 计算机组成原理之运算方法和运算器
  17. Microsoft Virtual Earth 浅谈!
  18. 双十一有哪些必入的数码好物?值得入手的数码好物推荐
  19. 一次搞懂延迟任务及十种延迟任务的实现方式
  20. ROS wiki文件系统导航

热门文章

  1. 美团门票公布清明假期数据:单日入园人次超200万
  2. 花呗可延后还啦!支付宝“移动花卡”开启预约
  3. 中国男足孔已己版(转载,博大家一笑)
  4. Android studio 2.3版本出现的问题: Please select at least one of the signature versions to use
  5. 罗马书1:18-32
  6. redis:hash数据类型与操作
  7. Android 音频开发(三) 如何播放一帧音频数据上
  8. FLEX开发人员中心部分下载
  9. python软件安装链接电视_Python爬取电影天堂指定电视剧或者电影
  10. Mybatis.cfg配置标签的顺序问题