js数组去重算法

  来来来 ,整理完数组排序 ,咱们再来看看数组去重 。这个可以说有很多方式了 。之前看过的算法方式太多 ,导致思路其实有时候真的很受限,不过也是整理来学习用的 ,如有雷同 ,纯属巧合啊 ,小婊贝们~

  首先呢 ,我们来看看思路比较直接的方法,基本思路就是声明一个新数组arr_n,将【0】这个成员压入arr;然后从【1】开始循环当前数组,设置一个变量a,给他一个初始值1;内层嵌套从【0】对arr_n数组的循环 ,用外层对当前数组循环的当前项this[i]和arr_n的每一项arr_n[j]进行对比,如果有相等,则将0赋值给a,然后break退出内层循环;判断a的值,若等于初始值则说明遍历完arr_n并没有重复,则将当前this[i]压入新数组 arr_n,以此类推 ,直到所有排序完成 ,返回新数组 arr_n;    代码如下:

Array.prototype.unique=function(){
    var arr_n=[];
    arr_n.push(this[0]);
    for(var i=1;i<this.length;i++){
        var a=1;
        for(var j=0;j<arr_n.length;j++){
            if(this[i]==arr_n[j]){
                a=0;
                break;
            }
        }
        if(a==1){
            arr_n.push(this[i]);
        }
    }
    return arr_n;
};
var a=[1,3,4,3,5,2,5];
a.unique();

  最近在看JavaScript面向对象编程这本书时发现了一个特别好的API是indexOf,后来网上查了查用在数组上其实也是很棒的有木有 ,不过还是有坑的 ,下面关于indexOf对数组用法是复制来的 ,因为觉得很浅显易懂了,大家共勉 ,大家看看别踩了坑 就行;再者就是 indexOf是ES5的语法 ,不支持IE8以下的浏览器(无奈摊手~ )

let arr = [‘orange‘, ‘2016‘, ‘2016‘];

arr.indexOf(‘orange‘); //0
arr.indexOf(‘o‘); //-1

arr.indexOf(‘2016‘); //1
arr.indexOf(2016); //-1
这里没把例子拆的那么细,四个用例足以说明问题。
    arr.indexOf(‘orange‘) 输出 0 因为 ‘orange‘ 是数组的第 0 个元素,匹配到并返回下标。
    arr.indexOf(‘o‘) 输出 -1 因为此方法不会在每一个元素的基础上再次执行 indexOf 匹配。
    arr.indexOf(‘2016‘) 输出 1 因为此方法从头匹配直到匹配到时返回第一个数组元素的下表,而不是返回全部匹配的下标。
    arr.indexOf(2016) 输出 -1 注意:这里不会做隐式类型转换。

以下是运用indexOf的代码段:

Array.prototype.unique1=function(){
    var arr_n=[];
    arr_n.push(this[0]);
    for(var i=1;i<this.length;i++){
        if( arr_n.indexOf(this[i])==-1){
            arr_n.push(this[i]);
        }
    }
    return arr_n;
}
var b=[12,3,4,5,3,5,3,7,12];
b.unique1();

还有一种方法 ,我认为是比较好的了 ,简洁又不存在兼容性问题,思路也很简单 ,先声明一个空数组和一个object对象,循环遍历当前数组,将数组的每一项当做object的属性来看 ,判断对象是否已有当前项的属性即可 ,若不重复,将当前this[i]push进新数组,给object的this[i]属性赋个值即可,最后返回新数组;代码如下:

Array.prototype.unique2=function(){
    var arr_n=[],obj={};
    for(var i=0;i<this.length;i++){
        if(!obj[this[i]]){
            arr_n.push(this[i]);
            obj[this[i]]=1;
        }
    }
    return arr_n;
};
var b=[12,3,4,5,3,5,3,7,12];
b.unique2();

如果你也刚好入门 ,刚好对去重算法比较懵懂 ,希望对你有些许帮助!

时间: 2024-12-22 22:39:16

js数组去重算法的相关文章

JS数组去重算法实现

转帖: https://github.com/wteam-xq/testDemo/blob/master/array.html 1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下: // 最简单数组去重法 function unique1(array){ var n = []; //一个新的临时数组 //遍

前端面试必备:JS数组去重算法实现

之前一段时间一直在准备面试, 因而博客太久没更新: 现在基本知识点都复习完毕, 接下来就分享下 面试的一些常见问题: 去正规的互联网公司笔试.面试有很大的概率会碰到 使用javascript实现数组去重 的编码问题: 如:魅族笔试题: 本博文就js 如何实现数组去重整理出5种方法,并附上演示Demo 以及 源码.  1.遍历数组法   最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就放入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5

javascript数组去重算法-----4(另一种写法)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----4(另一种写法__2)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----5

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----3

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----2

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----2</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

js 数组去重(数组元素是对象的情况)

js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致所有元素都相等,这时判断方法不再有意义.一般最后数组就只剩一个 2.如果是直接比较法,则因为对象在内存中是按引用访问的,属性值相同的对象也不会相等,简单的直接判断不再有意义.一般最后数组还是原样 所以就需要进行值的比较 当然了,也可以换着法来将相应对象转为字符串(不是默认的那种[object Obj

javascript数组去重算法-----1

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----1</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5