JS數組去重的三種方法

編寫uniqueArray.jsjavascript

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;

編寫單元測試java

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]);
    });
});

輸出:shell

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


  3 passing (24ms)

經過hash來實現是比較優雅的姿式。數組

相關文章
相關標籤/搜索