JS配列の重さ解消の3つの方法

2079 ワード

uniqueAray.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で実現するのは比較的優雅な姿勢です.