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