本文实例讲述了javascript数组去重常用方法。分享给大家供大家参考,具体如下:
数组去除重复值是面试常考内容,也是很容易用到的一个技巧,下面就几种去重的方法进行介绍。
首先是最常见的方法,也就是添加一个临时数组,将原数组遍历,加入临时数组,每次加入时判断待加入的元素是否存在于临时数组中,代码如下:
// 对数组进行去重操作,只考虑数组中元素为数字或字符串,返回一个去重后的数组 //第一种方法,遍历,将没有的插入临时数组 function uniqArray1(arr) { var n=[]; for(var i=0;i<arr.length;i++){ //如果当前项已经保存到了临时数组,则跳过,否则加入 if(n.indexOf(arr[i])==-1){ n.push(arr[i]); } } return n; }
那么还有没有更好的办法呢?可以采用哈希表的思想,在JavaScript中,对象的查找比数组下标的查找要快很多倍。所以我们可以创建一个对象专门来存放已加入临时数组的元素,那么每次加入新的元素时就可以通过查找对象来判断是否重复了,代码如下:
//第二种方法,使用哈希表 function uniqArray2(arr){ var n={},//哈希表 r=[];//零时数组 for(var i=0;i<arr.length;i++){ if(n[arr[i]]==null){//如果哈希表中没有,则添加到哈希表,且进入临时数组 n[arr[i]]=true; r.push(arr[i]); } } return r; }
还有一种方法,虽然速度没有哈希表快,但是比最基本的indexOf来的快,思想就是先经过排序函数sort,再比较相邻的元素,不同的就加到临时数组中。代码如下:
//第三种方法,先排序,再比较邻接部分 function uniqArray3(arr){ arr.sort(); var r=[arr[0]]; for(var i=1;i<arr.length;i++){ if(arr[i]!=r[r.length-1]){//由于已经经过了排序,所以相邻的是相同的 r.push(arr[i]); } } return r; }
最后实验代码如下:
//验证数组去重函数的使用 var arr=[2,3,4,2,4,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]; for(var i=0;i<10000000;i++){//为了分辨出花费时间的区别,特此增加数组的长度 arr.push(3); } var time1=Date.now(); var n1=uniqArray1(arr); var time2=Date.now(); console.log(n1);//2,3,4,5说明第一种去重成功 console.log(time2-time1);//218 time1=Date.now(); var n2=uniqArray2(arr); time2=Date.now(); console.log(n2);//2,3,4,5说明第二种去重成功 console.log(time2-time1);//63,说明对象下标的引用要比indexOf搜索快得多 time1=Date.now(); var n3=uniqArray3(arr); time2=Date.now(); console.log(n3);//2,3,4,5说明第三种去重成功 console.log(time2-time1);//203,说明sort方法使用快排,比indexOf快,但是没有哈希快
可以看到哈希算法的速度是最快的。
PS:这里再为大家提供几款去重复工具供大家参考使用:
在线去除重复项工具:
http://tools.jb51.net/code/quchong
在线文本去重复工具:
http://tools.jb51.net/aideddesign/txt_quchong
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
本文向大家介绍javascript数组去重方法分析,包括了javascript数组去重方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript数组去重方法。分享给大家供大家参考,具体如下: 方法一. 思路:创建一个新的空数组,循环遍历旧数组,用indexOf()方法,可以取得元素在数组中的位置,如果值为-1表示不存在。那么新数组用indexOf去获取老数组的每一个元素,
本文向大家介绍JS数组去重常用方法实例小结【4种方法】,包括了JS数组去重常用方法实例小结【4种方法】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS数组去重常用方法。分享给大家供大家参考,具体如下: js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill 方法一:遍历数组,建立新数
本文向大家介绍JavaScript数组去重算法实例小结,包括了JavaScript数组去重算法实例小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了JavaScript数组去重算法。分享给大家供大家参考,具体如下: 测试用例: arr = ["1",3,"1",1,4,5,1,"2",5,1,{"name":"li","age":20},2,4,3,{"name":"li","age":
本文向大家介绍JavaScript数组去重的3种方法和代码实例,包括了JavaScript数组去重的3种方法和代码实例的使用技巧和注意事项,需要的朋友参考一下 数组去重的方法有很多,到底哪种是最理想的,自己不清楚。于是自己测试了下数组去重的效果和性能。测试十万个数据,代码和所耗大概时间如下。 到底采用哪种方法,根据实际情况而定吧。
本文向大家介绍javascript数组去重方法汇总,包括了javascript数组去重方法汇总的使用技巧和注意事项,需要的朋友参考一下 javascript数组去重方法汇总 其中第1种和第3种方法都用到了数组的indexOf方法。此方法的目的是寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所以此函数会浪费掉很多时间。 而第2中方法用的是has
本文向大家介绍javascript实现数组去重的多种方法,包括了javascript实现数组去重的多种方法的使用技巧和注意事项,需要的朋友参考一下 废话不多说,直接拿干货! 先说说这个实例的要求:写一个方法实现数组的去重。(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考); 先给初学者解释一下什么叫数组去重(老鸟跳过):意思就是