美文网首页
数组去重

数组去重

作者: 天字一等 | 来源:发表于2019-05-29 12:15 被阅读0次

转载自:https://www.jianshu.com/p/fb4550a2d7f2
另外几种方法:https://www.cnblogs.com/baiyangyuanzi/p/6726258.html

js数组去重
去除数组中重复的元素,用js实现一般来说有三种较常用的方式。

function 1
时间复杂度O(n^2)

1、创建一个结果数组;
2、遍历数组,每次从原始数组取出一个元素与结果数组对比;
3、若结果数组中无该元素,将该元素存入结果数组;

Array.prototype.uniq = function() {
    let res = [ this[0] ];
    for (let i = 1; i < this.length; i++) { // 每次从原数组取一个
        let matched = false;
        for (let j = 0; j < res.length; j++) { // 将这个元素与res中每个元素对比
            if (this[i] == res[j]) { // 若匹配成功,打断第i次的内部循环
                matched = true;
                break;
            }
        }
        /* 注意这里逻辑,不能用else,否则将多将很多元素放入res */
        if (!matched) { // 若匹配不成功,将该元素放入res
            res.push(this[i]);
        }
    }
    return res;
};

function 2
这种方法效率会比function 1 高,时间复杂度为O(n),但会影响原数组顺序

1、原数组排序,使相同元素处于相邻位置;
2、创建一个结果数组;
3、因为相同元素相邻,只需要将原数组每个元素与结果数组中上一个元素比较;
4、将不同于上一个元素的元素放入结果数组;

Array.prototype.uniq = function() {
    this.sort();
    let res = [ this[0] ];
    for (let i = 1; i < this.length; i++) {
        if (this[i] != res[res.length - 1]) {
            res.push(this[i]);
        }
    }
    return res;
};

function 3
这种方法时间复杂度与第二种相同,但因为少了一次快速排序,效率最高,且不影响数组顺序

1、创建一个结果数组和一个json对象;
2、遍历原数组,每次查找其在json中是否有值;
3、将不存在的放入结果数组,并在json中以该元素创建一个属性并随意赋值;

Array.prototype.uniq = function() {
    let res = [];
    let json = {};
    for (let i = 0; i < this.length; i++) {
        if (!json[this[i]]) { // 若不存在该属性,将其放入res并建立该属性到json
            res.push(this[i]);
            json[this[i]] = 1;
        }
    }
    return res;
};

相关文章

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • 实现数组去重有哪些方式

    简单的数组去重 数组对象去重

  • 数组去重的四种方法

    利用双for循环去重 利用对象数组去重 利用对象数组去重并且记录重复次数 通过创建一个新数组进行数组去重

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • js:数组去重

    数组去重的常见写法: 数组去重封装成方法: es6的数组去重(Array.from):

  • ES6数组去重

    普通数组去重 方法1 方法2 对象数组去重

  • js reduce去重用法

    reduce不仅仅可以数据累加,还可以实现去重效果。 重复次数计算 数组去重 数组对象去重,转为数组 对象去重

  • 数组去重

    传统方法 ES6 扩展 传统方法 最后再写到 Array.prototype 原型中

  • 数组去重

    老题了。。虽然网上一搜一大堆,还是自己想了想,自己动笔写了几种。

网友评论

      本文标题:数组去重

      本文链接:https://www.haomeiwen.com/subject/tegetctx.html