资讯专栏INFORMATION COLUMN

JS数组去重的三种方法

hikui / 2279人阅读

摘要:编写双重循环去重当出现相同的元素时,删除重复的元素哈希表形式查询对象是否存在当前元素属性借助方法查询空数组里面是否已经存在这个值,不存在则推入编写单元测试输出通过来实现是比较优雅的姿势。

编写uniqueArray.js

var Unique = {
    /**
     * 双重循环去重
     * @param arr
     * @returns {*}
     */
    dbloop: function (arr) {
        var i,
            j,
            res = [];
        for (i = 0; i < arr.length; i++) {
            for (j = i + 1; j < arr.length; j++) {
                if (arr[i] === arr[j]) {
                    arr.splice(j--, 1);//当出现相同的元素时,删除重复的元素
                }
            }
        }

        return arr;
    },

    /**
     * 哈希表形式
     * @param arr
     * @returns {Array}
     */
    hash: function (arr) {
        var i,
            hash = {},
            res = [];

        //查询hash对象是否存在当前元素(属性)
        for (i = 0; i < arr.length; i++) {
            if (!hash[arr[i]]) {
                res.push(arr[i]);
                hash[arr[i]] = true;
            }
        }

        return res;
    },

    /**
     * 借助indexOf方法
     * @param arr
     * @returns {Array}
     */
    indexOf: function (arr) {
        var i,
            res = [];

        //查询空数组里面是否已经存在这个值,不存在则推入
        for (i = 0; i < arr.length; i++) {
            if (res.indexOf(arr[i]) === -1) {
                res.push(arr[i]);
                console.log(arr[i]);
            }
        }

        return res;
    }
};

module.exports = Unique;

编写单元测试

var expect = require("chai").expect,
    unique = require("../uniqueArray");

describe("Test unique array function", function () {
    var arr = [1, 1, 2, 4, 3, 4, 4, 5, 1];
    var res = [1, 2, 4, 3, 5];

    it("# hash table test", function () {
        expect(unique.hash(arr)).to.be.deep.equal(res);
    });
    it("# indexof test", function () {
        expect(unique.hash(arr)).to.be.deep.equal(res);
    });
    it("# double loop test", function () {
        expect(unique.dbloop(arr)).to.be.deep.equal([2, 3, 4, 5, 1]);
    });
});

输出:

Test unique array function
    ✓ # hash table test
    ✓ # indexof test
    ✓ # double loop test


  3 passing (24ms)

通过hash来实现是比较优雅的姿势。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79082.html

相关文章

  • [Javascript]数组去重三种实现方式

    摘要:方式使用获取并删除删除数组的第一个元素,判断这个元素是否还存在于数组中,如果存在则说明这个元素的是重复的如果不存在,进行操作方式建立一个哈希表,通过对象属性查询去除重复元素方式思路和方式类似,但是简洁很多来源个人博客 方式1:使用shift()获取并删除删除数组的第一个元素,判断这个元素是否还存在于数组中,如果存在则说明这个元素的是重复的;如果不存在,进行push()操作 functi...

    TZLLOG 评论0 收藏0
  • 思维导图整理大厂面试高频数组补充1: 最接近的三数之和 和 三数之和 的两个不同之处, 力扣16

    摘要:此专栏文章是对力扣上算法题目各种方法的总结和归纳整理出最重要的思路和知识重点并以思维导图形式呈现当然也会加上我对导图的详解目的是为了更方便快捷的记忆和回忆算法重点不用每次都重复看题解毕竟算法不是做了一遍就能完全记住的所 ...

    longmon 评论0 收藏0
  • js数组重的几种方法

    摘要:三种方法利用判断新数组中实际上也是使用的类似的传入数组如果当前数组的第已经保存进了临时数组,那么跳过,否则把当前项到临时数组里面利用判断旧数组结果数组如果当前数组的第项在当前数组中第一次出现的位置不是,那么表示第项是重复的,忽略掉。 三种方法 利用indexOf判断新数组 underscore.js中实际上也是使用的类似的indexOf //传入数组 functio...

    mykurisu 评论0 收藏0
  • 数组重的方法

    摘要:因为使用单独的接口存取数据所以不用担心与内置属性重名修改上面的方法后得到除了以外还有这种数据类型这是一个集合它不允许重复元素出现。 NaN NaN属于number,也是一种基本数据类型,只要有一边是 NaN,那么结果就是false 原始值和包装对象 包装对象即基本数据类型经过包装之后得到的对象,作为基本类型值的字符串拥有trim等方法,及length属性,正是由于JS代码会对原始值做一...

    sevi_stuo 评论0 收藏0
  • 数组 去除重复项的方法 你知道几种呢?

    摘要:数组去重的方法第一种方法方法可以将结构转为数组这就是提供了一种数据去重的方法第二种方法运用扩展运算符提供了一种更便捷的去重方法第三种方法这是一种原生的去重方法,借助一个空数组来实现去重,便于理解底层原理函数带有参数第四种方法同上函数不带参 数组去重的方法 第一种方法 Array.from方法可以将Set结构转为数组 let items = new Set([1, 2, 3, 4, 5]...

    tomato 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<