Js删除数组重复元素的多种方法

  js对数组元素去重有很多种处理的方法,本篇文章中为网络资源整理,当然每个方法我都去实现了;写下来的目的是希望自己活学活用,下次遇到问题后方便解决。

第一种

 1 function oSort(arr){
 2     var result={};
 3     var newArr=[];
 4     for(var i=0;i<arr.length;i++){
 5         if(!result[arr[i]]){
 6             console.log(result[arr[i]]); //看看输出的是什么
 7             newArr.push(arr[i]);
 8             result[arr[i]]=1;
 9         }
10     }
11     console.log(newArr);
12 }
13 var st=[‘a‘,‘a‘,‘b‘,‘a‘,‘c‘,‘d‘];
14 oSort(st);

以上代码输出  ["a", "b", "c", "d"]

第二种

  备注:遍历要删除的数组st, 把元素分别放入另一个数组tmp中,在判断该元素在st中不存在才允许放入tmp中
 1 function unique(st){
 2     var tmp=[];
 3     for(var i in st){
 4         if(tmp.indexOf(st[i]) == -1){
 5             tmp.push(st[i]);
 6         }
 7     }
 8     return tmp;
 9 }
10 var arr=[‘aa‘,‘ab‘,‘b‘,‘aa‘,‘c‘,‘d‘];
11 console.log(unique(arr));

以上代码输出 ["aa", "ab", "b", "c", "d"]

说明一下,当arr.indexOf()未找到元素时返回-1

第三种

  备注:把目标数组st的元素值和键的位置调换 自动就把重复的元素给删除掉了
 1 function unique(st){
 2     var tmp=new Array();
 3     for(var i in st){
 4         tmp[st[i]]=1;
 5     }
 6     var tmparr=new Array();
 7     for(var j in tmp){
 8         tmparr.push(j);
 9     }
10     console.log(tmp);//看看这里输出了什么
11     return tmparr;
12 }
13 var st=[‘aa‘,‘ab‘,‘b‘,‘aa‘,‘c‘,‘d‘];
14 console.log(unique(st));

以上代码输出 ["aa", "ab", "b", "c", "d"]

第四种

 1 function unique(st){
 2     st=st||[];
 3     var al={};
 4     for(var i=0;i<st.length;i++){
 5         var j=st[i];
 6         if(typeof (al[j]) ==‘undefined‘){
 7             al[j]=1;
 8         }
 9     }
10     st.length=0;
11     for(var i in al){
12         st[st.length]=i;
13     }
14     return st;
15 }
16 var arr=[‘aa‘,‘ab‘,‘b‘,‘aa‘,‘c‘,‘d‘];
17 console.log(unique(arr));

以上代码输出 ["aa", "ab", "b", "c", "d"]

第五种

  备注:使用原型的方法来发散思维,原博主还是很赞。

 1 //数组去重的方法
 2 Array.prototype.unique=function(){
 3     //集中声明变量
 4     var
 5       oldArr=this,
 6       newArr=[oldArr[0]],
 7       len=oldArr.length,
 8       i=1;
 9
10     //过滤空数组
11     if(!len) return this;
12
13     //过滤重复元素
14     for(;i<len;i++){
15        newArr.indexOf(oldArr[i])<0 ? newArr.push(_this) : ‘‘;
16     }
17     //返回过滤后的数组没有影响原数组
18     return newArr;
19 }
20 var arr=[‘a‘,‘a‘,‘b‘,‘a‘,‘c‘,‘d‘];
21 console.log(arr.unique());//["a", "b", "c", "d", unique: function]

上面有提到 indexOf() 方法, 可以看看我的另外一篇文章简单了解JS 中的indexOf方法

综合以上多种数组去重方法,其实方法都是很类似的;就是个别方法与众不同,有时间再来研究其中道理。
附上原文链接:http://www.cnblogs.com/yy-hh/p/4591852.html#3304504

如有疑问之处,欢迎指点,我会及时更正,谢谢!

时间: 2024-10-18 22:28:13

Js删除数组重复元素的多种方法的相关文章

前端面试高频题:删除数组重复元素的多种方法

最近在想着换工作,去了一家中关村的上市公司,面试官随便问了几个问题其中就提到了怎么删除数组元素的方法,表示这已经是第三次遇到了这个问题了,由于知识口头说说所以就随便说了下,之前用的时候都是直接找的方法库虽然知道大致是怎么写的但是还没有真正写过,网上的方法还是蛮多的这里也给大家分享一个作者写的吧,希望对初学者有所帮助: //数组去重的方法 Array.prototype.unique=function(){ //集中声明变量 var oldArr=this, newArr=[oldArr[0]],

Perl删除数组中元素的多种方法

Perl中的数组元素起始引用序号为0,@array的第一个元素为$array[0],依次递增,最后一个元素为$array[-1]或者$#array.如果要删除一个数组中已有的元素,可以用以下几个函数来实现. 1.函数名 grep调用语法 @foundlist = grep (pattern, @searchlist);解说 与同名的UNIX查找工具类似,grep函数在列表中抽取与指定模式匹配的元素,参      数pattern为欲查找的模式,返回值是匹配元素的列表.例子 @list = ("T

javascript 笔试题之删除数组重复元素

笔试时紧张没写出来,静下心后发现简单的要死. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content=&quo

循环删除数组中元素的正确方法

1.循环删除数组中元素的正确方法 提起循环删除数组中的元素,最先想到的就是使用for循环和数组的splice方法来实现(正序循环删除方法),如下代码用来实现删除数组中大于2的元素: 1 let arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]; 2 for (let i = 0, len = arr.length; i < len; i++) { 3 if (arr[i]> 2) { 4 arr.splice(i, 1); 5 } 6 } 7 console.log(arr)

[Js]删除数组指定元素

写在前面 在最近的项目中,有用到js对数组的操作,之前自己几乎没有用到这种方法,这里就记录一下,算是对学到的东西的一种总结吧. 数组对象splice方法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目.该方法会改变原始数组. 基本语法 arrayObject.splice(index,howmany,item1,.....,itemX)  参数说明 index:必需.整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置. howmany:必需.要删除的项目数量.

Perl快捷删除数组重复元素,以前写过类似的博客,今天被问起时,却支支吾吾!

以前写过类似的博客: http://blog.csdn.net/three_man/article/details/34084361 今天拿出来,再好好剖析一下: 1. 构造一个含有重复元素的数组 my @arr1 = (1 .. 10); my @arr2 = (5 .. 15); # join multi array my @arr = (@arr1, @arr2); 2. 删除数组中的重复元素 sub removeRepeat { my $arrRef = shift; my %count

js删除数组中元素的方法

Array.prototype.del=function(n) { //n表示第几项,从0开始算起. //prototype为对象原型,注意这里为对象增加自定义方法的方法. if(n<0){//如果n<0,则不进行任何操作.  return this; }else{  return this.slice(0,n).concat(this.slice(n+1,this.length)); } /*  concat方法:返回一个新数组,这个新数组是由两个或更多数组组合而成的.  这里就是返回thi

JS 删除数组中元素方法

Array.prototype.remove = function(val) { var index = this.indexOf(val); if(index > -1) { this.splice(index, 1); } }; var arr = ['1','2','3']; arr.remove("2")  ->  arr =  ['1','3'];

JavaScript删除数组重复元素的5个高效算法

1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下: // 最简单数组去重法 function unique1(array){   var n = []; //一个新的临时数组   //遍历当前数组   for(var i = 0; i < array.length; i++){     //如果当前数组的