2012-03-05 66 views
1

我正在使用一个哈希表,我试图检查对象的存在。不过,我还没有成功地弄清楚如何做到这一点。有人可以帮助指导我这一点。谢谢。jQuery inArray with Hashtable

当前的代码。

当clientId等于字段ID并且项目ID返回true时,else add to saved_tokens。

var saved_tokens = {}; 

if ($.inArray(item.id, saved_tokens) == -1) { 
    saved_tokens.push[clientId] = item.id; 
} 
+0

请注意,您不能无需调用parens函数。目前你正在'.push'功能上设置一个属性。 – pimvdb 2012-03-05 20:28:25

+0

您是否试图检查对象中是否已存在键“clientId”,或者是否存在“item.id”值? – nnnnnn 2012-03-05 20:28:56

+0

我有多个clientId可以共享相同的项目。我需要测试clientId以查看它是否包含Item,如果不将它添加到带有clientId的saved_toekens。 – 2012-03-05 20:31:39

回答

5

不要使用jQuery。使用纯JavaScript:

if (!saved_tokens.hasOwnProperty(clientId)) { // If clientId is not in the hash 
    saved_tokens[clientId] = item.id; 
} 

.push是一种数组方法。 A {}创建一个对象。由于这个对象不是一个数组,它没有任何数组方法。

+0

这是否也会阻止将重复的item.id添加到散列中? – 2012-03-05 20:32:21

+0

@George No.你有两个选择:1)同时维护'item.id'的哈希表,或2)遍历所有'saved_tokens'循环,并检查该值是否(不等于)'item.id' 。 – 2012-03-05 21:02:30

0

我个人使用'typeof'。

var saved_tokens = {}; 

if (typeof(saved_tokens[clientId]) == 'undefined') { 
    saved_tokens[clientId] = item.id; 
} 
+0

注意到这并没有区分“clientId”是否作为对象中的键存在,值为undefined,或者clientId根本不存在。 'if(clientId in saved_tokens)'测试它是否被定义为一个键(具有任何值)。 – nnnnnn 2012-03-05 20:51:19

+0

@nnnnnn 我没有得到您的评论。你的意思是说,如果clietId的值'undefined'和clientId不退出,那么typeof? – Jashwant 2012-03-05 21:17:39

+0

是的。如果'saved_tokens'有一个键'clientId',但与该键相关的值是'undefined',那么'typeof'将返回''undefined'',就像'saved_tokens'没有'clientId'键时一样所有。如果您需要区分这两种可能性,那么使用'if(clientId in saved_tokens)',或者如果您需要知道属性是否直接设置在对象上(而不是通过原型链继承),请使用'saved_tokens.hasOwnProperty(的clientId)' – nnnnnn 2012-03-05 22:31:40