0

サイトの WP プラグインで JS の競合を解決しています。を使用して空の配列を作成すると

var myArray = [];

また

var myArray = new Array();

console.log(myArray);こう言っています。

[randomize: function]

それ以外の

[]

配列の長さは 0 のままです。ランダム化関数の配置は次の場所で確認できます。

    Array.prototype.randomize = function () {
    var e = this.length,
        t, n, r;
    if (e == 0) return false;
    while (--e) {
        t = Math.floor(Math.random() * (e + 1));
        n = this[e];
        r = this[t];
        this[e] = r;
        this[t] = n
    }
    return this
};

(おそらく一時的に) 通常の空の配列に戻すにはどうすればよいですか? または、配列からすべての非ネイティブ要素を削除するだけですか?

ところで、私がそれを繰り返したときに問題が発生しました

for(var i in myArray ){ ... }

そして、関数を余分な要素として扱いました。その時までに、数値的にインデックス化された要素を追加しました。

4

2 に答える 2

3

最初のルールは、配列の数値プロパティ (つまり、インデックス) だけを反復処理する場合は、for、do、または while ループをカウンターと共に使用することです。

for..in を使用する場合は、チェーンhasOwnPropertyを介して継承された名前付きプロパティの反復を避けるために、テストを含める必要があります。[[Prototype]]

for (var p in obj) {
  if (obj.hasOwnProperty(p)) {
    // p isn't inherited, do stuff with obj[p]
  }
}

最後に、おそらく演算子を使用して Array.prototype からメソッドを削除できますが、delete読み込んだライブラリがそれを使用している可能性があります。

于 2013-03-21T00:53:22.567 に答える
0

wordpress プラグインが JavaScript のネイティブ配列をオーバーライドする場合、何もできません。関数を配列のプロトタイプにバインドすることでそれを行うことができます。

Array.prototype.randomise = function(){
    //some code...
};

インデックス配列の場合は for(var i=0.. ループを作成できます。ハッシュマップの場合は、item が typeof を使用して関数であるかどうかを確認できます。

for(var val in arr){
    if(typeof(arr[val]) != 'function'){
        //do something
    }
}
于 2013-03-21T00:54:04.810 に答える