解鎖多種JavaScript陣列去重姿勢

2021-09-20 08:11:02 字數 3054 閱讀 4428

const arr = ;

// 生成[0, 100000]之間的隨機數

for (let i = 0; i < 100000; i++)

// ...實現演算法

console.time('test');

arr.unique();

console.timeend('test');

array.prototype.unique = function () 

}if (!isrepeat)

} return newarray;

}

實現二:

array.prototype.unique = function () 

}if (!isrepeat)

} return newarray;

}

基於思路二的寫法改進版,實現三:

array.prototype.unique = function () 

}newarray.push(this[i]);

} return newarray;

}

經過測試**測試的時間如下:

test1: 3688.440185546875ms

test2: 4641.60498046875ms

test3: 17684.365966796875ms

基本思路:如果索引不是第乙個索引,說明是重複值。

實現一:

array.prototype.unique = function () )

}

let arr = [1, 2, 3, 22, 233, 22, 2, 233, 'a', 3, 'b', 'a'];

array.prototype.unique = function ()

});return newarray;

}

經過測試**測試的時間如下:

test1: 4887.201904296875ms

test2: 3766.324951171875ms

array.prototype.unique = function () 

} return newarray;

}

經過測試**測試的時間如下:

test: 4300.39990234375ms

實現二:

array.prototype.unique = function () 

} return newarray;

}

test1: 121.6259765625ms

test2: 123.02197265625ms

array.prototype.unique = function () 

});return newarray;

}

經過測試**測試的時間如下:

test: 4123.377197265625ms

array.prototype.unique = function () 

return init;

}, );

}

經過測試**測試的時間如下:

test: 180.401123046875ms

基本思路:利用了物件的key不可以重複的特性來進行去重。

但需要注意:

解決第一、第三點問題,實現一:

array.prototype.unique = function () ;

for (let i = 0; i < this.length; i++)

} return newarray;

}

array.prototype.unique = function () ;

for (let i = 0; i < this.length; i++)

} return newarray;

}

test1: 113.849365234375ms

test2: 157.030029296875ms

array.prototype.unique = function () 

}return newarray;

}

實現二:

array.prototype.unique = function () )

}

經過測試**測試的時間如下:

test1: 27.89697265625ms

test2: 21.945068359375ms

array.prototype.unique = function ()
array.prototype.unique = function ()

經過測試**測試的時間如下:

test1: 36.8046875ms

test2: 31.98681640625ms

const arr = [1, 1, '1', '1', 0, 0, '0', '0', undefined, undefined, null, null, nan, nan, {}, {}, , , /a/, /a/];

經過綜合考慮,最優的陣列去重演算法是採用map資料結構實現的演算法。

原文發布時間為:2023年05月21日

掘金

JavaScript繼承的多種方式

1.原型鏈繼承 function a firstname a.prototype.getfirstname function function b lastname b.prototype newa 遠 b.prototype.getlastname function var person newb...

javascript呼叫匿名函式的多種方式

目前,以下多種方式中,只能理解第一種和第二種,其他都不明白是什麼個原理,功力尚淺,還需努力,各位大神能不能解釋下?方式1,呼叫函式,得到返回值。強制運算子使函式呼叫執行 function x,y 3,4 方式2,呼叫函式,得到返回值。強制函式直接量執行再返回乙個引用,引用再去呼叫執行 functio...

計算fibonacci數(多種方法)

include using namespace std 計算fibonacci數 方法一 二分遞迴法,時間複雜度為o 2 n 額外空間複雜度為常數 int recursivefibonacci int n 方法二 線性遞迴,時間複雜度為o n 空間複雜度為o n int linearrecursio...