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();

对于价值观,我首先呼吁。

我怎样才能解决这个问题?出于某种原因,我确实让它在我自己网站的一部分中工作,所以它makeIdUnique()似乎像它应该的那样工作,但为什么在这个例子中没有呢?(也许是格式错误的数组?)

原始函数是从之前的问题中派生出来的:Renaming duplicates in Javascript Array

4

2 回答 2

2

@TrySpace

据我了解,“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()如果找到或未找到,则返回index该数组中的搜索元素-1$.inArray(value, array)是 jQuery 方法,其工作与.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 回答