js数组去重6法解析

1,建个新数组,遍历老数组,若在新数组里没找到,则将这个元素放到新数组,然后返回

Array.prototype.unique1 = function()

{

var n = [];

for(var i = 0; i < this.length; i++)

{

if (n.indexOf(this[i]) == -1) n.push(this[i]);

}

return n;

}

2,利用hash表,将放到新数组的元素在hash表中存true值,下次遍历数组时检查元素在hash表中的值

Array.prototype.unique2 = function()

{

var n = {},r=[];

for(var i = 0; i < this.length; i++)

{

if (!n[this[i]])

{

n[this[i]] = true;

r.push(this[i]);

}

}

return r;

}

3,遍历老数组,若是这个第i项的元素的位置不是第i项,则是重复的,忽略掉

Array.prototype.unique3 = function()

{

var n = [this[0]];

for(var i = 1; i < this.length; i++)

{

if (this.indexOf(this[i]) == i) n.push(this[i]);

}

return n;

}

4,先将老数组排序,将老数组第一个放进新数组,老数组第二个与新数组第一个比较,若不一样则放进新数组中,若一样则是重复的,这种打乱原来的顺序了

Array.prototype.unique4 = function()

{

this.sort();

var re=[this[0]];

for(var i = 1; i < this.length; i++)

{

if( this[i] !== re[re.length-1])

{

re.push(this[i]);

}

}

return re;

}

5,新建一个将原数组排过序的新数组,对新数组进行排序,对应找到重复的元素位置,在原数组里删掉它

Array.prototype.unique5 = function(){

    var self = this;

    var _a = this.concat().sort();

    _a.sort(function(a,b){

        if(a == b){

            var n = self.indexOf(a);

            self.splice(n,1);

        }

    });

    return self;

};

6,先把reduce方法分析下,arr.reduce(callback,[initialValue]) callback函数有4个参数,第一个参数previousValue,若是有初始值initialValue,则是初始值,若没有,则是数组中的第一个值,第二个currentValue是数组中当前被处理的元素,在新建数组中遍历老数组中的每个元素,若是没有,在新数组中加上

Array.prototype.unique6 = function()

{

return this.reduce(function(p, c)

{

if (p.indexOf(c) < 0) p.push(c);

return p;

}, []);

};

一个10000个随机数的数组的六种测试用时:

method 1 used 349ms

method 2 used 5ms

method 3 used 442ms

method 4 used 15ms

method 5 used 13ms

method 6 used 424ms

参考

6 ways to get unique values of an Array in Javascript

Array.prototype.reduce()

时间: 2024-08-04 03:38:22

js数组去重6法解析的相关文章

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

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

js数组去重的4种方法

js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, j = this.length; i < j; i++) { if (this[i] === item) { return i; } } return -1; } Ar

JS数组去重的几种常见方法

JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(array[i]); } } ret

JS数组去重,js中数组(Array)的排序(sort)

JS数组去重 var ddd = [1,2,4,5,2, 222,1,5,6]; var uq = {}; var rq = []; for(var i=0; i<9; i++){ if(!uq[ddd[i]]){ uq[ddd[i]] = true; rq.push(ddd[i]); } } return rq; js中数组(Array)的排序(sort)注意事项 var arrDemo = new Array(); arrDemo[0] = 10; arrDemo[1] = 50; arrD

JS数组去重比较

数组去重复是一个常见的需求,我们暂时考虑同类型的数组去重复.主要是理清思路和考虑执行性能. for循环删除后面重复的 var uniqueFor = function(arr) { for (var i = 0; i < arr.length - 1; i++) { var item = arr[i]; for(var j = i+1; j < arr.length; j++ ) { item === arr[j] && (arr.splice(j, 1), j--); } }

js 数组去重的方法总结

想沉淀一下自己.代码改变世界~~~ 1.利用Array.from代码如下 1 var arr = [1,2,3,4,3,2,1] 2 function unique(arr){ 3 return Array.from(new Set(arr)) 4 } 5 console.log(unique(arr)) 2.利用es6(...)拓展运算符.demo 1 var arr = [1,2,3,4,3,2,1] 2 function unique(arr){ 3 return [...new Set(

js数组去重常用方法

js数组去重是面试中经常会碰到的问题,无论是前端还是node.js数组常见的有两种形式,一种是数组各元素均为基本数据类型,常见的为数组字符串格式,形如['a','b','c'];一种是数组各元素不定,元素中既有基本数据类型,也有引用数据类型,形式如[{name:1,age:2}];这里介绍两种常见的js去重方式. 方法一:针对数组字符串形式(利用set) let arr = [1,2,3,4,5,4,3,2,1]; let set = new Set(); arr.forEach((item)=

JS数组去重算法实现

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

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

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