JavaScript配列は重い7種類の実現に行きます.
37035 ワード
はじめに
jsの中で行列が重いのはありふれた問題です.なぜかというと、これは普通のビジネスシーンでよく見られるものです.ちょうど必要です.その次に面接の中で面接者も聞くことが好きで、基本的にはあなたの答えが多ければ多いほど良いと思うので、今日この機会にちょうど考えを整理してみます.
前にあるのは、異なるビジネスシーンが異なる技術手段を決定しても、一口で食べる関数やアルゴリズムは存在しないということです.そして、皆さんは必ず「優雅」という二文字に縛られないでください.業務の中で問題を解決できる方法はいい方法です.問題を解決できる方法こそ、性能や書き方を最適化し、より優雅になる資格があります.ですから、初期の問題に直面した時、まず考えたのはどのように解決するかではなく、性能と書き方を兼ね備えた処理方法を一歩で考えたいです.
二重エルゴード
三.単重循環
四.並べ替え後、元に戻す
五.対象Keyが重い
六.ES 6 Map去重
七.ES 6セットは重くなります
jsの中で行列が重いのはありふれた問題です.なぜかというと、これは普通のビジネスシーンでよく見られるものです.ちょうど必要です.その次に面接の中で面接者も聞くことが好きで、基本的にはあなたの答えが多ければ多いほど良いと思うので、今日この機会にちょうど考えを整理してみます.
前にあるのは、異なるビジネスシーンが異なる技術手段を決定しても、一口で食べる関数やアルゴリズムは存在しないということです.そして、皆さんは必ず「優雅」という二文字に縛られないでください.業務の中で問題を解決できる方法はいい方法です.問題を解決できる方法こそ、性能や書き方を最適化し、より優雅になる資格があります.ですから、初期の問題に直面した時、まず考えたのはどのように解決するかではなく、性能と書き方を兼ね備えた処理方法を一歩で考えたいです.
二重エルゴード
Array.prototype.unique = function () {
let temp = [];
let len = this.length;
let flag;
for (var i = 0; i < len; i++) {
flag = false;
for (var j = i + 1; j < len; j++) {
if (this[j] === this[i]) {
flag = true;
break;
}
}
if (!flag) {
temp.push(this[i])
}
}
return temp;
}
let result = [1,1,'1','1',0,0,'0','0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/].unique();
console.log('result', result);
// [ 1, '1', 0, '0', undefined, null, NaN, NaN, {}, {}, [], [], /a/, /a/ ]
二重の遍歴はどんな言葉でも通じる食べ方と言えます.最初から考えやすいはずです.上記の出力から、NaNと対象に加えて、二重エルゴードが完了しました.普通のビジネスシーンでは、それを使っても需要を達成できます.三.単重循環
Array.prototype.unique = function () {
let arr = [];
let len = this.length;
for(var i = 0; i < len; i++){
if(arr.indexOf(this[i]) == -1){
arr.push(this[i])
}
}
return arr;
}
let result = [1,1,'1','1',0,0,'0','0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/].unique();
console.log('result', result);
// [ 1, '1', 0, '0', undefined, null, NaN, NaN, {}, {}, [], [], /a/, /a/ ]
単重循環とは、二重循環の上に構築された最適化方案であり、実は単純な発想であり、一つの関数内の空配列を利用して過重配列の要素を受信し、その判断根拠は、元配列内の要素の下標記を通じて、この空配列内に今後追加される要素の下標記と対比することにほかならない.四.並べ替え後、元に戻す
Array.prototype.unique = function () {
let arr = [];
// cancat() ,
let sortArr = this.concat().sort();
let len = sortArr.length;
let temp = sortArr[0];
for (var i = 0; i < len; i++) {
if ((!i || temp !== sortArr[i])) {
arr.push(sortArr[i]);
}
temp = sortArr[i];
}
return arr;
}
let result = [1, 1, '1', '1', 0, 0, '0', '0'].unique();
let result2 = [1, 1, '1', '1', 0, 0, '0', '0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/].unique();
console.log(result)
// [ 0, '0', 1, '1' ]
console.log(result2)
// , NaN , '1' , sort() .
並べ替え後に重いという考えは限界が多く、メタデータには[]、{}、NaNなどの要素が混ざっていますが、同じ元素を隣接の原則で並べてはいけません.主にアラy.sort()関数に制限があります.だから私はあなたが使うのを勧めません.五.対象Keyが重い
Array.prototype.unique = function () {
let rec = [];
let len = this.length;
let temp = {};
for(var i = 0;i < len;i++){
if(!temp[this[i]]){
temp[this[i]] = 1;
rec.push(this[i]);
}
}
return rec;
}
let result = [1, 1, '1', '1', 0, 0, '0', '0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/].unique()
console.log(result) //[ 1, 0, undefined, null, NaN, {}, [], /a/ ]
出力から文字列の要素は除去されたが、実際には'1'と'1は明らかに一つのものではないので、タイプ判定の識別子を追加します.Array.prototype.unique = function () {
let rec = [];
let len = this.length;
let temp = {};
for(var i = 0;i < len;i++){
var key = typeof this[i] + this[i];
if(!temp[key]){
temp[key] = 1;
rec.push(this[i]);
}
}
return rec;
}
let result = [1, 1, '1', '1', 0, 0, '0', '0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/].unique()
console.log(result) // [ 1, '1', 0, '0', undefined, null, NaN, {}, [], /a/ ]
この時、出力の結果から、このような最適化後のkeyを利用して重い構想に行きます.完璧に需要を解決しました.六.ES 6 Map去重
Array.prototype.unique = function () {
let rec = [];
let len = this.length;
let temp = new Map();
for(var i = 0;i < len;i++){
if(!temp.get(this[i])){
temp.set(this[i], 1);
rec.push(this[i]);
}
}
return rec;
}
let result = [1, 1, '1', '1', 0, 0, '0', '0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/].unique()
console.log(result);
// [ 1, '1', 0, '0', undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]
出力から見ると、対象は重くなく、他は重くないということが分かります.七.ES 6セットは重くなります
Array.prototype.unique = function () {
return [...new Set(this)]
}
let result = [1, 1, '1', '1', 0, 0, '0', '0',undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/].unique()
console.log(result)
// [ 1, '1', 0, '0', undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]
出力から見ると、対象は重くなく、他は重くなく、コードは極めて簡単で、1行だけです.