首页 > 语言 > JavaScript > 正文

javascript数组去重小结

2024-05-06 15:00:28
字体:
来源:转载
供稿:网友

前言

最近为了换工作,准备下面试,开始回顾复习JavaScript相关的知识,昨天下午想到了数组去重的相关方法,干脆整理出几篇JavaScript算法文章,以备后用,此系列文章不定篇数,不定时间,想到哪写到哪,不保证正确性,不保证高效率,只是谈谈个人理解,如有错误,请诸位斧正。

关于去重

数组去重是一个比较常见的算法考察点,实现去重的方式无外乎通过唯一性和非唯一性。简单来讲就是挑出唯一的或者删除不唯一的。以下所有算法都是我自己瞎命名的,请无视之。

循环匹配去重

顾名思义,就是把数组中的每一个元素都和存放元素的数组对比,遇到不重复的元素,放入新数组中,直至循环结束,由于匹配也有循环,也可以称为双循环匹配去重,这也是大家都能想到的最简单的方式。

实现代码:

var arr=[1,3,4,56,3,7,9,7];var result=[];//匹配function isMatch(array,n){  for(var i=0;i<array.length;i++){    if(array[i]==n){      return true;    }  }  return false;};//验证所有元素function unqiue(array){  for(var i=0;i<array.length;i++){    if(!isMatch(result,array[i])){      result.push(array[i]);    }  }  return result;};console.log(unqiue(arr));

注意:上面方法有一个bug,当存在数字和数字形式的字符串的时候,没有区分出数字和数字字符串。因为在匹配函数isMatch()里用的是双等“==”,没有验证元素类型,实际应该使用全等“===”。
修改后的代码如下:

var arr=[1,3,4,56,3,'1',7,9,7];var result=[];//匹配function isMatch(array,n){  for(var i=0;i<array.length;i++){    if(array[i]===n){      return true;    }  }  return false;};//验证所有元素function unqiue(array){  for(var i=0;i<array.length;i++){    if(!isMatch(result,array[i])){      result.push(array[i]);    }  }  return result;};console.log(unqiue(arr));

算法优缺点:

优点:

实现简单,思路直观

缺点:

效率低下

JSON去重/对象去重/字典去重

JSON去重,简单来讲就是利用Object对象key的唯一性,将数组的元素转换为JSON或者说对象的key值。JSON的value存储数组的索引index,然后对JSON对象进行for in循环,存储到新数组中。

Array、JSON、{}都是Object,所以采用任意一种都可以实现此算法。

实现代码:

Array方式:

var arr=[1,3,4,56,3,'1',7,9,7];function unqiue(array){  var cache=[];  var result=[];   //将数组元素转为对象的key  for(var i=0;i<array.length;i++){    cache[array[i]]=i;  };    //存储key(实际的数组元素)  for(key in cache){    result.push(key);  };    return result;}  console.log(unqiue(arr));

JSON方式:

var arr=[1,3,4,56,3,'1',7,9,7];function unqiue(array){  var cache={};  var result=[];   //将数组元素转为对象的key  for(var i=0;i<array.length;i++){    cache[array[i]]=i;  };    //存储key(实际的数组元素)  for(key in cache){    result.push(key);  };    return result;}  console.log(unqiue(arr));            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选