js数组去重三种方法

本文讲述三种js去重方法

第一种方法思路:

1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,查看元素是否在结果数组
3.若结果数组中没有该元素,则存到结果数组中,否则跳入下次循环。代码如下:

 1 Array.prototype.unique = function(){
 2  var res = [this[0]];
 3  for(var i = 1; i < this.length; i++){
 4   if(res.indexOf(this[i])>=0){
 5       continue ;
 6   }else{
 7       res.push(this[i]);
 8   }
 9  }
10  return res;
11 }
12 var arr = [1, ‘a‘, ‘a‘, ‘b‘, ‘d‘, ‘e‘, ‘e‘, 1, 0]
13 console.log(arr.unique());

第二种方法思路:
1.先将原数组进行排序
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中

 1 Array.prototype.unique = function(){
 2  this.sort(); //先排序
 3  var res = [this[0]];
 4  for(var i = 1; i < this.length; i++){
 5   if(this[i] !== res[res.length - 1]){
 6    res.push(this[i]);
 7   }
 8  }
 9  return res;
10 }
11 var arr = [1, ‘a‘, ‘a‘, ‘b‘, ‘d‘, ‘e‘, ‘e‘, 1, 0];
12 console.log(arr.unique());

第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。

第三种方法思路:
1.创建一个新的数组存放结果
2.创建一个空对象
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

 1 Array.prototype.unique = function(){
 2  var res = [];
 3  var json = {};
 4  for(var i = 0; i < this.length; i++){
 5   if(!json[this[i]]){
 6    res.push(this[i]);
 7    json[this[i]] = 1;
 8   }
 9  }
10  return res;
11 }
12 var arr = [1, ‘a‘, ‘a‘, ‘b‘, ‘d‘, ‘e‘, ‘e‘, 1, 0];13 console.log(arr.unique());

具体使用哪种方法,具体问西具体分析吧。

时间: 2024-11-09 21:47:54

js数组去重三种方法的相关文章

js 数组去重复、内置方法

1.使用js 数组去重复: 方法①: var arr=[1,2,1,5,2,3,5,1,6,9]; function deRepeat(){ var newArray=[]; var obj={}; var index=0; var len=arr.length; for(var i=0;i<len;i++){ if(obj[arr[i]]==undefined){//不存在 obj[arr[i]]=1; newArray[index++]=arr[i]; }else if(obj[arr[i]

JS合并数组的几种方法及优劣比较

这篇文章主要介绍了JS合并数组的几种方法及优劣比较,本文讲解了concat.循环插入.reduce等方法合并数组,并对它们的优劣做了比较,需要的朋友可以参考下 本文属于JavaScript的基础技能. 我们将学习结合/合并两个JS数组的各种常用方法,并比较各种方法的优缺点. 我们先来看看具体的场景: 代码如下: var q = [ 5, 5, 1, 9, 9, 6, 4, 5, 8];var b = [ "tie", "mao", "csdn",

JS 中检测数组的四种方法

今天和大家分享一下 JS 中检测是不是数组的四种方法,虽然篇幅不长,不过方法应该算是比较全面了. 1. instanceof 方法 instanceof 用于检测一个对象是不是某个类的实例,数组也是一种对象所以也可以利用 instaceof 来进行判断. let arr = [1, 2, 3]; console.log(arr.instanceof(Array)); // true 这种方法在只有一个全局作用域的环境下是可以的,但是如果一个网页中包含多个框架,那么就会存在不同的全局环境,不同的环

js去除空格12种方法

注:本文转载于csdn:黄卉博主的文章<js去除空格12种方法> 实现1 1 String.prototype.trim = function() { 2 return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 3 } 看起来不怎么样, 动用了两次正则替换,实际速度非常惊人,主要得益于浏览器的内部优化.一个著名的例子字符串拼接,直接相加比用Array做成的StringBuffer 还快.base2类库使用这种实现.实现2 1 Strin

动态加载JS脚本的4种方法

要实现动态加载JS脚本有4种方法: 1.直接document.write <script language="javascript"> document.write("<script src='test.js'><\/script>"); </script>   2.动态改变已有script的src属性 <script src='' id="s1"></script> <

[Arduino] 逗号分隔文本到数组的两种方法

以下是今日练习通过逗号来分割字符数组/字符串的2个例子和方法" 1.通过indexOf函数 /* *Splitsplit sketch *split a comma-separated string */ String message = "Peter,Paul,Mary"; int commaPosition; void setup(){ Serial.begin(9600); } void loop(){ Serial.println(message); do{ comm

Java中创建数组的几种方法

public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intValue=arr[5]; //System.out.println(intValue); //创建数组的第二种方法 int[] x={1,2,3,4}; //System.out.println(x[1]); //创建数组的第三种方法. int[] y= new int[]{1,2,3,4,5}; int m=0; boolean

python将两个数组合并成一个数组的两种方法的代码

内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","Green","Blue"]c2 = ["Orange","Yellow","Indigo"]c1.extend(c2) assert c1 == ["Red","Green",&q

python遍历数组的两种方法的代码

工作过程中,把开发过程中较好的一些内容段备份一下,下面内容是关于python遍历数组的两种方法的内容,希望对小伙伴有用途. colours = ["red","green","blue"] for colour in colours: print colour # red # green # blue 下面的方法可以先获得数组的长度,然后根据索引号遍历数组,同时输出索引号 colours = ["red","gree