`
天梯梦
  • 浏览: 13629982 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

JS数组去重算法实现

 
阅读更多

1.遍历数组法

最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下:

// 最简单数组去重法
function unique1(array){
var n = []; //一个新的临时数组
//遍历当前数组
for(var i = 0; i < array.length; i++){
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if (n.indexOf(array[i]) == -1) n.push(array[i]);
}
return n;
}

 

2.对象键值对法

该方法执行的速度比其他任何方法都快, 就是占用的内存大一些;实现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,不是的话给对象新增该键并放入新数组。注意 点: 判断是否为js对象键时,会自动对传入的键执行“toString()”,不同的键可能会被误认为一样;例如: a[1]、a["1"] 。解决上述问题还是得调用“indexOf”。

// 速度最快, 占空间最多(空间换时间)
function unique2(array){
var n = {}, r = [], len = array.length, val, type;
for (var i = 0; i < array.length; i++) {
val = array[i];
type = typeof val;
if (!n[val]) {
n[val] = [type];
r.push(val);
} else if (n[val].indexOf(type) < 0) {
n[val].push(type);
r.push(val);
}
}
return r;
}

 

3.数组下标判断法

还是得调用“indexOf”性能跟方法1差不多,实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入结果数组。

function unique3(array){
var n = [array[0]]; //结果数组
//从第二项开始遍历
for(var i = 1; i < array.length; i++) {
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if (array.indexOf(array[i]) == i) n.push(array[i]);
}
return n;
}

 

4.排序后相邻去除法 

虽然原生数组的”sort”方法排序结果不怎么靠谱,但在不注重顺序的去重里该缺点毫无影响。实现思路:给传入数组排序,排序后相同值相邻,然后遍历时新数组只加入不与前一值重复的值。

// 将相同的值相邻,然后遍历去除重复值
function unique4(array){
array.sort();
var re=[array[0]];
for(var i = 1; i < array.length; i++){
if( array[i] !== re[re.length-1]){
      re.push(array[i]);
    }
  }
  return re;
}

 

5.优化遍历数组法

该方法的实现代码相当酷炫;实现思路:获取没重复的最右一值放入新数组。(检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)推荐

// 思路:获取没重复的最右一值放入新数组
function unique5(array){
var r = [];
for(var i = 0, l = array.length; i < l; i++) {
    for(var j = i + 1; j < l; j++)
      if (array[i] === array[j]) j = ++i;
    r.push(array[i]);
  }
  return r;
}

 

// 判断浏览器是否支持indexOf ,indexOf 为ecmaScript5新方法 IE8以下(包括IE8, IE8只支持部分ecma5)不支持

if (!Array.prototype.indexOf){
// 新增indexOf方法
Array.prototype.indexOf = function(item){
var result = -1, a_item = null;
if (this.length == 0){
return result;
}
for(var i = 0, len = this.length; i < len; i++){
a_item = this[i];
if (a_item === item){
result = i;
break;
}
}
return result;
}
}

 

 

原文:http://www.cnblogs.com/pangzai/p/4809331.html

转自:JS数组去重算法实现

 

 

 

 

分享到:
评论

相关推荐

    js数组去重的5种算法实现

    主要介绍了js数组去重的5种算法实现,详细解释了实现思路,以及每个算法的优缺点,感兴趣的小伙伴们可以参考一下

    JS实现的JSON数组去重算法示例

    主要介绍了JS实现的JSON数组去重算法,结合实例形式分析了javascript针对json数组的遍历、判断实现去重复功能相关操作技巧,需要的朋友可以参考下

    javascript实现数组去重的方法

    数组去重是一个比较常见的算法考察点,实现去重的方式无非就是唯一性或者非唯一性,简而言之,就是选出唯一的或者去掉不唯一的,下面总结了几种方法。 方法一:利用双层for循环通过原数组去重,就是遍历数组,把数组...

    JavaScript数组去重算法实例小结

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

    JS实现的合并多个数组去重算法示例

    本文实例讲述了JS实现的合并多个数组去重算法。分享给大家供大家参考,具体如下: var arr1 = ['a','b']; var arr2 = ['a','c','d']; var arr3 = [1,'d',undefined,true,null]; //合并两个数组,去重 var concat_ =...

    js代码-数组去重算法

    js代码-数组去重算法

    JavaScript数组去重的几种方法效率测试

    JavaScript数组去重是前端面试酷爱的问题,问题简单而又能看出程序员对计算机程序执行过程的理解如何。数组去重的方法有很多,到底哪种是最理想的我不清楚。于是我测试了下数组去重的效率。测试二十万个数据,随着...

    Javascript 数组去重的方法(四种)详解及实例代码

    Javascript 数组去重的四种方法 四种算法来实现这个目的: 第一种方法: Array.prototype.unique1 = function () { var n = []; //一个新的临时数组 for (var i = 0; i &lt; this.length; i++) //遍历当前数组 {...

    JavaScript基于对象方法实现数组去重及排序操作示例

    本文实例讲述了JavaScript基于对象方法实现数组去重及排序操作。分享给大家供大家参考,具体如下: [removed] //用对象方法实现数组去重 Array.prototype.unique = function() { var newArr = []; for (var i =...

    js 数组去重的四种实用方法

    我总共想出了三种算法来实现这个目的: Array.prototype.unique1 = function() { var n = []; //一个新的临时数组 for(var i = 0; i &lt; this.length; i++) //遍历当前数组 { //如果当前数组的第i已经保存进了临时...

    javascript数组去重小结

    最近为了换工作,准备下面试,开始回顾复习JavaScript相关的知识,昨天下午想到了数组去重的相关方法,干脆整理出几篇JavaScript算法文章,以备后用,此系列文章不定篇数,不定时间,想到哪写到哪,不保证正确性,不...

    javascript数组去重的方法汇总

    四种算法来实现这个目的: 第一种: Array.prototype.unique1 = function () { var n = []; //一个新的临时数组 for (var i = 0; i &lt; this.length; i++) //遍历当前数组 { //如果当前数组的第i已经保存进了...

    js代码-编写数组去重

    js代码-编写数组去重

    javascript数组去重的六种方法汇总

     我总共想出了三种算法来实现这个目的: Array.prototype.unique1 = function() { var n = []; //一个新的临时数组 for(var i = 0; i &lt; this.length; i++) //遍历当前数组 { //如果当前数组的第i已经保存进...

    js算法中的排序、数组去重详细概述

    在js中实现数组排序,采用数组中sort方法实现还是比较简单的,下面有个不错的示例大家可以参考下

Global site tag (gtag.js) - Google Analytics