JavaScript数组去重的7种方式

1.利用额外数组
function unique(array) {    if (!Array.isArray(array)) return;

    let newArray = [];    for(let i=0, len=array.length; i<len; i++) {        let itemAtIndex = array[i];        if (!newArray.includes(itemAtIndex)) { // newArray.indexOf(itemAtIndex) === -1            newArray.push(itemAtIndex);        }    }

    return newArray;}
2.indexOf与lastIndexOf
function unique(array) {    if (!Array.isArray(array)) return;

    for(let i=0; i<array.length; i++) {        let itemAtIndex = array[i];        if (array.indexOf(itemAtIndex) !== array.lastIndexOf(itemAtIndex)) {            array.splice(i, 1);            i--; // array 与 array.length change        }    }

    return array; // 顺序可能会改变}

注: 利用额外数组配合indexOf与lastIndexOf 取出未重复出现的元素

function unique(array) {    if (!Array.isArray(array)) return;

    let newArray = [];    for(let i=0, len=array.length; i<len; i++) {        let itemAtIndex = array[i];        if (array.indexOf(itemAtIndex) === array.lastIndexOf(itemAtIndex)) {            newArray.push(itemAtIndex);        }    }

    return newArray;}
3.filter
function unique(arr) {    return arr.filter(function(item, index, arr) {      // 取出元素, 该元素在数组中第一次出现的索引 === 当前索引值      return arr.indexOf(item, 0) === index;    });}
4.双层for循环
function unique(array) {    if (!Array.isArray(array)) return;

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

        for(var j=i+1; j<array.length; j++) {            if (array[j] === array[i]) {                array.splice(j, 1);                j--; // array 与 array.length change            }        }

    }

    return array;}
5.利用sort排序后, 相邻元素不相等
function unique(array) {    if(!Array.isArray(array)) return;

    array.sort();    for (let i=0; i<array.length; i++) {        if (i <= array.length-2) {            if (array[i+1] === array[i]) {                array.splice(i+1, 1);                i--; // array 与 array.length change            }        }    }

    return array; // 顺序可能会改变}
6.利用对象key唯一的特性(这个方法还能标记出重复元素的数量); 另, map原理与object一致
function unique(array) {    if (!Array.isArray(array)) return;

    let obj = {};    for(let i=0, len=array.length; i<len; i++) {        let itemAtIndex = array[i];        obj[itemAtIndex] = ‘‘;    }

    let newArray = [];    for(let key in obj) {        newArray.push(Number(key));    }

    return newArray; // 顺序可能会改变}
7.利用ES6 set
function unique(array) {    if (!Array.isArray(array)) return;    return Array.from(new Set(array)); // [...new Set(array)] }

测试函数及测试用例

function ensureEqual(a, b, message) {    if (JSON.stringify(a) !== JSON.stringify(b)) {        console.log(`***测试失败, ${JSON.stringify(a)} 不等于 ${JSON.stringify(b)}, ${message}`);    }};

ensureEqual(unique([1,2,3,3,4,4,5,5,6,1,9,3,25,4]), [1,2,3,4,5,6,9,25], ‘test1‘);

以上就是JavaScript数组去重的较为常规的方式;其中,第3种比较不容易想到;另,由于业务中一般处理的都是相同类型的数据,因此这里数组里的数据统一为数值类型,并未做混合类型的考虑。

原文地址:https://www.cnblogs.com/rencoo/p/11828329.html

时间: 2024-11-02 23:35:46

JavaScript数组去重的7种方式的相关文章

【学】数组去重的3种方式

数组去重的3种方式 var arr = [1,4,2,3,4,5,6,7,3,4,5,23,2,3,4,5,3,2,3,4,5];   function findInArray(n,arr){ for (var i=0; i<arr.length; i++) { if(arr[i]==n){ return true; } } return false; }   function removeRep1(arr){ //方法2 var arr1 = []; for (var i=0; i<arr.

Javascript数组去重的几种方法

Javascript数组去重的几种方法 新建空数组,通过for...of(ES6)循环遍历,通过indexOf判断元素是否在新数组中存在,将不存在的(indexOf(n)==-1)元素push到新数组中: let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_indexOf(originalArr){ let newArr = []; for(n of originalArr){ if(newArr.in

javascript数组去重的3种方法

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>数组去重</title> </head> <body> <script type="text/javascript"> //注意有一个元素是空的 var test1 = [0,0,1,1,2,'sss',2,,3,'abc',3,4,4,'s

JavaScript数组去重的四种方法

今天,洗澡的想一个有趣的问题,使用js给数组去重,我想了四种方法,虽然今天的任务没有完成,5555: 不多说,po代码: //方法一:简单循环去重    Array.prototype.unique1 = function(){                var temp = [];        for(var i=0; i < this.length; i++){            if(temp.indexOf(this[i]) == -1){                tem

数组去重的几种方式

一.利用indexOf查找,ie9以下不兼容 function noRepeat(ary) { if (ary instanceof Array) { var newAry = []; for (var i = 0; i < ary.length; i++) { var cur = ary[i]; if (newAry.indexOf(cur) === -1) {//indexOf IE9以下不兼容 newAry.push(cur) } } return newAry; } } 二.利用对象属性

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 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar