JavascriptはJavaScript配列のuniq方法を更新します。


前回書いた『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 方法、ありがとうございます。