5种方法实现数组去重

  1. 最简单的思路,先创建一个新数组作为容器,遍历原数组,判断每一项在新数组中是否存在,若不存在则把这一项push到新数组中,若存在则忽略。

    var arr = [1, 2, 3, 2, 4, 1];
    var newArr = [];
    
    for (var i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i]);
        }
    }
    
    console.log(newArr); // [1, 2, 3, 4]
  2. 直接修改原数组。遍历原数组,使用indexOf判断每一项,若返回值与自身的索引值不相等,说明同样的值在前面已经出现过(因为indexOf返回的是第一个匹配项的索引值),使用splice()除去这一项。

    var arr = [1, 2, 3, 2, 4, 1];
    
    for (var i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) !== i) {
            arr.splice(i,1);
        }
    }
    
    console.log(arr); // [1, 2, 3, 4]
  3. 利用对象的属性名不能重复这一特性,创建一个对象,把数组中的值依次添加为对象的属性,再使用Object.keys()得到包含所有属性名的数组。但要注意对象的属性名都是字符串形式,所以在本例中还要把它们转回数字。

    var arr = [1, 2, 3, 2, 4, 1];
    var obj = {};
    var res = [];
    
    arr.every(n => obj[n] = 1); // 把每一项添加为对象的属性,重复的属性不会再次添加,而是修改已存在的属性的值
    
    res = Object.keys(obj).map(n => +n); // 得到包含字符串属性名的数组并把每一项转换成数字
    
    console.log(res); // [1, 2, 3, 4]
  4. 先对数组进行排序,再循环,如果相邻的两项相同,则删除一项,i--,再继续对比。

    var arr = [1, 2, 3, 2, 4, 1];
    arr.sort();
    
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] === arr[i+1]) {
            arr.splice(i,1);
            i--;
        }
    }
    
    console.log(arr); // [1, 2, 3, 4]
  5. 最短的方法,使用new Set([...])。

    var arr = [1, 2, 3, 2, 4, 1];
    var newArr = new Set(arr);
    console.log(newArr); // [1, 2, 3, 4];

原文地址:https://www.cnblogs.com/sukiY/p/9219791.html

时间: 2024-11-13 08:10:18

5种方法实现数组去重的相关文章

indexOf() 使用方法(数组去重)

对于indexOf()的用法一直停留在查找第几个字符串,却不知道它能用到数组去重中,首先还是温顾下indexOf()的语法: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <!-- 1.indexOf() 方法对大小写敏感! 2.如果要检索的字符串值没有出现,则该

几种常见的数组去重方法

1:新建一个数组,遍历原来数组,判断遍历的值是否在新数组中存在,不存在就push 2:方法类似于1,在数组中查找,如果每次查找到的下标正好与当前遍历的i相等,就说明该数组中的数据时第一次出现 3:第三种 /* * 给传入数组排序,排序后相同值相邻, * 然后遍历时,新数组只加入不与前一值重复的值. * 会打乱原来数组的顺序 * */ 原文地址:https://www.cnblogs.com/xubj/p/10122810.html

ES6 set方法对数组去重和排序

之前对数组做去重有很多方法,但大多比较麻烦,现在用ES6里面的set方法非常方便 直接上代码 <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <body> <script> function 初级写法(){ let arr = [3,5,2,1,3,2,4]; le

数组去重的几种方法

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(arra

javaScript数组去重方法

在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断新数组b中是否有原数组a中的元素,如果没有的话则在b数组的后面追加上a[i],如果有的话就不执行任何操作,最后可以达到数组去重的操作. 这种方法应该是平时开发中最常用的JS数组去重的方法了,简单又实用. demo2: 第二种去重的方法比较巧妙,是定义一个空对象和一个空数组,在遍历原数组的时候来用原数

JavaScript数组去重方法及测试结果

最近看到一些人的去面试web前端,都说碰到过问JavaScript数组去重的问题,我也学习了一下做下总结. 实际上最有代表性也就三种方法:数组双重循环,对象哈希,排序后去重. 这三种方法我都做了性能测试,有兴趣的朋友可以去试试,这是测试地址 双重循环最慢(不是一般的慢),对象哈希是最快的,排序后去重根据浏览器不同比对象哈希慢2-3倍

ES6 set和map数据结构对对象数组去重简单实现

自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [...new Set(arr)] } console.log(unique(arr)) // [1, 2, 3, 4] 但是当数组的项不再是简单的数据类型时,比如是对象时,这种方法就会导致错误,比如下面的结果 let arr = [ { name: 'a', num: 1}, { name: 'b',

javascript 实现字符串反转的两种方法

第一种方法:利用数组方法 //先split将字串变成单字数组,然后reverse()反转,然后将数组拼接回字串 var str = "abcdef"; str.split("").reverse().join('') 第二种方法:暴力遍历 var str="abcdef" ,str2=""; var i=str.length; i=i-1; for (var x = i; x >=0; x--) { str2 += st

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