2

重複する ID を検出しようとしていますが、

http://jsfiddle.net/HB7ev/10/

そして、私が正しく理解していれば:

if (id in dupeUIDCheck) 

の値がid配列にあるかどうかを確認します: dupeUIDCheck、ただし、次のようです:

dupeUIDCheck[id] = true;

最後に設定すると、実際にチェックが機能します。

それは実際には内部を見ていません:

dupeUIDCheck = $(document).find('DIV')
            .map(function(){ return this.id || undefined})
            .toArray();

値については、最初に呼び出します。

どうすればこれを修正できますか? 何らかの理由で、自分の Web サイトの一部で動作しているので、makeIdUnique()正常に動作しているように見えますが、この例では動作しないのはなぜですか? (おそらく配列の形式が正しくないのでしょうか?)

元の関数は以前の問題からフォークされました: Renaming duplicates in Javascript Array

4

2 に答える 2

2

@トライスペース

私が理解しているように、「dupeUIDCheck」は通常の配列です。これが当てはまる場合は、Array.prototype.indexOf メソッドを使用する必要があります。

if (dupeUIDCheck.indexOf(id) != -1) {
 ...
}

このコード「dupeUIDCheck[id] = true;」配列オブジェクト自体にプロパティを定義しており、「in」演算子はそのようなプロパティが存在することを明らかに確認しますが、これは配列要素には当てはまりません。「in」演算子は配列要素内を検索しません。

于 2012-06-09T16:01:09.023 に答える
1

使用できます

$.inArray(id, dupeUIDCheck)

また

dupeUIDCheck.indexOf(id);

ノート

配列と同様dupeUIDCheckに、配列内の要素が存在するかどうかを確認するには、 を使用する必要がありますindexOf()。見つかった場合、または見つからなかった場合、その配列内で検索された要素を.indexOf()返します。と同様の仕事をするjQueryメソッドです。index-1$.inArray(value, array).indexOf()


あれは

function makeIdUnique(id) {

   if (dupeUIDCheck.indexOf(id) >= 0) {  // exists
     // your code
   } 

}

また

function makeIdUnique(id) {

   if ($.inArray(id, dupeUIDCheck) >= 0) {  // exists
     // your code
   } 

}

id in dupeUIDCheck次のようなオブジェクトに対して機能します

var obj = {a: 'abc', b: 'def'};

次に、使用できるオブジェクトのプロパティを検索します

if( 'a' in obj) {

}
于 2012-06-09T15:58:18.500 に答える