JS配列は重さを取ります
4649 ワード
四つのアルゴリズム
1.
1.
Array.prototype.unique1 = function () {
console.log(this.length);
var n=[];//
for (var i = 0; i < this.length; i++) {
// i ,
// push
if (n.indexOf(this[i])==-1) {
n.push(this[i]);
};
}
return n;
}
2.shで時間を変えます.Array.prototype.unique2 = function(){
var n = {}, r = [];//n hash ,r
for (var i = 0; i < this.length; i++) {
if (!n[this[i]]) {//hash
n[this[i]] = true;// hash
r.push(this[i]);// push
}
}
return r;
}
3.索引を使うかArray.prototype.unique3 = function(){
var n = [];//
for (var i = 0; i < this.length; i++) {
// i i
// i , 。 。
if (this.indexOf(this[i]) == i) {
n.push(this[i]);
};
};
return n;
}
4.先に並べ替えを行うArray.prototype.unique4 = function(){
this.sort();
var re = [this[0]];
for (var i = 1; i< this.length; i++) {
if (this[i] !== re[re.length-1]){
re.push(this[i]);
}
};
return re;
}
ps:第一及び第三の方法は配列−indexOf()を使用しています.ie 8及び以下の互換性の問題があります.「ieカスタム版indexOf方法」を再定義する必要があります.if( !Array.indexOf )
{
Array.prototype.indexOf = function( obj ) {
for( var i=0; i<this.length; i++ )
{
if( this[ i ] == obj )
{
return i;
}
}
return -1;
}
}
このうち、第1および第3の方法は、配列のindexOf方法を用いている.この方法の目的は、メモリパラメータが行列に初めて現れた場所を探すことです.jsエンジンはこの方法を実現する時、ターゲットが見つかるまで配列を遍歴することが明らかです.この関数は時間を無駄にします.第2の方法はsh表を使います.すでに現れたのを下付きの形式でobjectに預けます.下付きの参照はindexOfで検索するよりずっと速いです.