JavascriptはJavaScript配列のuniq方法を更新します。
1882 ワード
前回書いた『JavaScript』 行列の uniq コードに問題があることが分かりました。たとえば配列内にあれば undefined 元素はフィルタできません。昨日見ました Lazy 兄弟は改めて関数を更新しました。今はこのように書いています。ARray.prototype.uniq = function() { var ルルーシュ = [], returnarr = [], origLen = this.length、 レスリングトン 機能 include(arr value) { for (var i = 0, n = arr.length i < n; ++i){ if (アール[i] === value) { return true; } } return false; } resultarr.push(this[0]) for (var i = 1; i < origLen; ++i) { if (include(resultAr) this[i]) { returnarr.push(this[i]) } else { resultarr.push(this[i]) } } レルトン = ルルーシュ.レングス this.length = レスリングトン for (var i = 0; i < レスリングトン ++i){ this[i] = ルルーシュ[i]; } return returnarr;彼の言い方によると、この解法は全体の過程で既存の配列に対する変化は二回しかなく、効率は他の二種類より二桁高いです。この関数の効率を実測しましたが、確かにそうです。私も自分の関数を再編集して更新しました。今はこのように見えます。ARray.prototype.uniq = function() { var tmp = new Aray; var length = this.length for(var) i = 0; i < length; i++) { var プッシュする = true; for(var) j = i + 1; j < length; j++) { if(this[j] === this[i] { プッシュする = false; break; } } if(push) { tmp.psh(this[i]) } } this.length = tmp.length for (var i = 0; i < tmp.length i++) { this[i] = tmp[i] } return tmp;同じページから得られた効率をテストしますか? Lazy 兄弟のほうが少し早いです。少し考えた後、私は少しの心得がありました。私の関数です。 for ネストは一つの関数で独立できます。 Lazy 兄弟の include 関数が同じです。上記の場合、コール関数はサイクル判定よりも効率が高いです。 配列の循環読み書き作業はデータ量が大きい場合、特に効率問題に注意しなければならない。 Lazy 兄弟の結論:配列の変化に対するオーバーヘッドが大きいので、できれば、既存の配列を変えないように操作します。配列自体を最終的に変更する必要がある場合は、結果を元の配列に与えて動作することができます。に対して lengthの計算は、効率には影響がないようだ。Lazy 兄弟の ルルーシュ 配列は彼のような書き方で同じ値を保存できます。ここで一つ褒めます。興味のある友達は行ってもいいです。 Lazy のページを見に行きます。最後に、王元涛兄弟の本を読むことをオススメします。 JavaScript 行列の uniq 方法、ありがとうございます。