数组去重的方法有很多,到底哪种是最理想的,自己不清楚。于是自己测试了下数组去重的效果和性能。测试十万个数据,代码和所耗大概时间如下。

  到底采用哪种方法,根据实际情况而定吧。

/*方法一: 1,'1' 会被认为是相同的; 所有hash对象,如:{x;1},{y:1}会被认为是相同的 //10ms */
Array.prototype.unique=function(){var newArr=[],obj={};for(var i=0,len=this.length;i<len;i++){if(!obj[this[i]]){ newArr.push(this[i]);obj[this[i]]=true;}}return newArr;
}/*方法一改进版:所有hash对象,如:{x;1},{y:1}会被认为是相同的  //30ms*/
Array.prototype.unique=function(){var newArr=[],obj={};for(var i=0,len=this.length;i<len;i++){if(!obj[typeof(this[i])+this[i]]){ newArr.push(this[i]);obj[typeof(this[i])+this[i]]=this[i];}}return newArr;
}/*方法二: 去重结果最好,但耗性能     //250ms*/
Array.prototype.unique=function(){var newArr=this.concat();for(var i=0,len=newArr.length;i<len;i++) {for(var j=i+1,len=newArr.length;j<len;j++) {//注意 ===if(newArr[i]===newArr[j]) {newArr.splice(j,1);j--;}}}return newArr;
}/*方法三:  不能去重hash对象  //25ms */
Array.prototype.unique = function(){var newArr = []; //一个新的临时数组for(var i = 0,len=this.length; i < len; i++){        if (newArr.indexOf(this[i]) == -1){    //如果当前数组的第i已经保存进了临时数组,那么跳过,否则把当前项push到临时数组里面newArr.push(this[i]);}}return newArr;
}var arr0=[11,21,221,13,24,"134","1",{x:1,y:1},{name:"pobaby",age:"12",hobby:"football"},{name:"pobaby1",age:"121",hobby:"football1"},{x:134},{y:132},{x:143},{y:3421},"神秘人物", "火柴人技巧格斗", "超音速战场", "小小辛打砖块", "火柴人技巧格斗", "加菲猫超人", "小小辛打砖块", "卑鄙的我2", "电流导线", "飞天手推车","神D秘人物", "火柴人S技巧格斗", "超音SD速战场", "小小SD辛打砖块", "火柴人SD技巧格斗", "加菲S猫超人", "小小DF辛打砖块", "卑鄙的FS我2", "电D流导线", "飞天SD手推车","神秘SD人物", "火柴人技D巧格斗", "超音ASD速战场", "小小辛打SAD砖块", "火柴人技SD巧格斗", "加菲FDS猫超人", "小小辛打SDF砖块", "卑鄙SDF的我2", "电流SDF导线", "飞天手DF推车","神秘SD人物", "火柴人技AS巧格斗", "超音速战FS场", "小小辛SDF打砖块", "火柴人SDF技巧格斗", "加菲SD猫超人",113,231,2221,123,234,"1334","21",{x:13,y:132},{name:"pobaby2",age:"122",hobby:"football2"},{name:"pobaby13",age:"1231",hobby:"football41"},{x:13544},{y:1352},{x:14543},{y:34521},"神秘人sd物", "火柴人技sd巧格斗", "超音速sd战场", "小小辛sd打砖块", "火柴人技巧gw格斗", "加菲猫ui超人", "小小辛yi打砖块", "卑鄙的yi我2", "电流yt导线", "飞天手ytui推车","神Dyu秘人物", "火yui柴人S技yui巧格斗", "超音SDyu速战场", "小小SD辛打砖uyi块", "火柴yui人SD技巧格斗", "加yui菲S猫超人", "小小DF辛打砖ui块", "卑鄙uyi的FS我2", "电D流导yui线", "飞天SD手推uyi车","神i秘SD人物", "火柴人技Dhk巧格斗", "超音ASD速战hk场", "小小辛打SAhkD砖块", "火柴人技SD巧ghk格斗", "加菲FDS猫k超人", "小小辛打SDF砖ytui块", "卑鄙SDF的yui我2", "电流SDyuF导线", "飞天手yuiDF推车","神iy秘SD人hk物", "火柴uyi人技AS巧格hk斗", "超音hg速战FS场", "小小辛SDF打砖hjk块", "火柴人SDF技hj巧格斗", "加菲SDhk猫超人" ];/*十万个随机数据*/
var arr=[],num;
for(var i = 0; i < 100000; i++){num=Math.floor(Math.random()*50);arr.push(arr0[num]);
}var t1= new Date().getTime(); console.log(t1); //开始时间

arr.unique(); //去重var t2 = new Date().getTime(); console.log(t2); //结束时间

console.log(t2-t1);

参考:http://www.ituring.com.cn/article/49791

http://blog.jobbole.com/33099/

http://php.js.cn/blog/array-unique-in-javascript/

http://www.nowamagic.net/javascript/js_RemoveRepeatElement.php

本文转自挨踢前端博客园博客,原文链接http://www.cnblogs.com/duanhuajian/p/3499993.html如需转载请自行联系原作者

@挨踢前端

javascript数组 去重相关推荐

  1. JavaScript数组去重算法实例

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写.遍历.比较.排序等操作及算法改进相关实现技巧,需要的朋友可以参考下 测试用例: arr = ...

  2. 六种方法实现JavaScript数组去重

    tip:有问题或者需要大厂内推的+我脉脉哦:丛培森 ٩( 'ω' )و [本文源址:http://blog.csdn.net/q1056843325/article/details/73277063 ...

  3. JavaScript 数组去重方法合集(简洁易懂)

    JavaScript数组去重 JavaScript去重的七种方法 简单易懂 方法一:暴力去重法 // 暴力去重法 function ArrayIsUnique (array) {if (!Array. ...

  4. JavaScript数组去重—ES6的两种方式

    说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代 ...

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

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

  6. java数组去重_再谈JavaScript数组去重

    JavaScript的数组去重是一个老生常谈的话题了.随便搜一搜就能找到非常多不同版本的解法. 细想一下,这样一个看似简单的需求,如果要做到完备,涉及的知识和需要注意的地方着实不少. 定义重复(相等) ...

  7. javascript数组去重的10种方法

    亲爱的小伙伴,对于数组javascript中的数组去重方法你知道多少种呢?学会如何对数组进行去重对于javascript的学习来说也是十分重要的,下边就让我来分享一下我所知道的集中数组去重的方法吧! ...

  8. javascript数组去重方法性能测试比较

    昨天参加的一个前端面试,其中有一题数组去重,首先想到的是对象存键值的方法,代码如下 方法一:(简单存键值) Array.prototype.distinct1 = function() {var i= ...

  9. javascript数组去重方法汇总

    前言 数组去重已经是一个老生常谈的问题了,依然经久不息,经过岁月的变迁es标准的升级迭代,似乎有越来越多的方法和方式供我们使用,那么那种方式才是最优的?那种才是最简洁的?这个我们一起来探讨. 省略:传 ...

最新文章

  1. bootcmd和bootargs
  2. 计算机系统-电路设计04-全加器的内部电路实现
  3. Win10无法访问Ubuntu18.04的smb解决
  4. 40. Element getAttribute() 方法
  5. MYSQL导入导出.sql文件
  6. 过年啦!什么是你的春节专属年味儿?
  7. Go语言学习查缺补漏ing Day1
  8. DataWhale活动-二手车价格预测 task3
  9. 水星MW300R无线路由器的设置方法
  10. 基层管理者必备的能力和素质
  11. No input file specified
  12. 计算机连接电视显示超范围,HDMI连接后电脑操作界面的边框超出电视屏幕,怎么解决...
  13. Navicat Premium 连接mysql数据库(win10 本地安装的),报错2509 -Authentication plugin ‘ caching_sha2_。。。最新解决办法
  14. 【前端】elementUI分页场景下对表格进行排序
  15. 关于petitfatfs的移植问题
  16. 深入分析ELF文件结构及其载入过程
  17. 沟通修炼 I型沟通-U型沟通
  18. j1_09_02。冒泡排序法。实现冒泡游戏功能关键算法。要求:综合使用分支、循环结构语句实现,直接输出结果不计分。
  19. 疫情之下欧洲汽车“众生相”
  20. java画蝴蝶_怎样用java语言编写蝴蝶结

热门文章

  1. C++小作业-设计一个用于人事管理的People(人员)类
  2. 汽车UDS诊断之通过标识符写入数据服务(0x2E)深度剖析
  3. 互联网日报 | 8月9日 星期一 | 字节跳动否认重启上市计划;TikTok全球下载量去年居首;中国代表团38金32银18铜收官...
  4. 数据丢包怎么修复_一种网络传输中实时音频数据丢包恢复的方法与流程
  5. 投影仪怎么看电视节目?超简单几个步骤小白也能马上学会
  6. 静态网页抓取_学习笔记
  7. 用户输入矩形的长和宽,计算其面积并输出,结果四舍五入,保留2位小数。
  8. java调节音量代码_音量调节(示例代码)
  9. buffer busy waits理解
  10. 微信回应转错帐被拉黑事件 支付宝:我们比较蠢 没法那么洒脱