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...