我正在尝试检测重复的ID,
如果我理解正确的话:
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
答案 0 :(得分:2)
@TrySpace
据我所知,“dupeUIDCheck”是一个常规数组。如果是这样,那么您需要使用Array.prototype.indexOf方法:
if (dupeUIDCheck.indexOf(id) != -1) {
...
}
这段代码“dupeUIDCheck [id] = true;”解决了这个问题,因为你在数组对象本身定义了属性,而“in”运算符显然会确认这样的属性存在,但是,对于数组元素来说并非如此。 “in”运算符不会在数组元素中查找。
答案 1 :(得分: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) {
}