2011-03-18 154 views
0

我在下面有这段代码。我不知道为什么inArray()不输出0.任何想法?jQuery:关于inArray的问题(​​)

var client = new Array(); 

function removeClient(id){ 

    alert(id); //prints 17 
    alert(client); //prints 17 
    alert(typeof(id)); //this prints "number" 
    alert(typeof(client)); //this prints "object" 
    alert($.inArray(id, client)); //this prints "-1", why? 

} 

问候

哈维

+3

你如何填充数组? – 2011-03-18 13:35:06

+2

它的工作原理:http://jsfiddle.net/simevidas/PFU9x/ – 2011-03-18 13:39:00

+2

或在这里:http://jsfiddle.net/fkling/ub6xX/ – 2011-03-18 13:41:06

回答

5

你可能填充字符串'17'而不是数字17。这就是为什么它返回-1

现场演示:http://jsfiddle.net/simevidas/s4Q3K/

+0

+1这就是我正要说的:) – 2011-03-18 13:46:26

+0

@Felix虽然好的谜语':)' – 2011-03-18 13:47:33

2

由于inArray(id, client)检查id是否是阵列client英寸

而且由于id不在该数组中(至少不是您的样本),所以它返回-1Know your API

+0

+1,我刚才说的 – 2011-03-18 13:38:48

+0

@Tomalak“id不是那个数组”?你的意思是“id不是*在那个数组中”? – 2011-03-18 13:40:15

+1

@Tomalak如果'id'(数字17)不在数组'client'中,那么为什么'client'会打印到'17'? – 2011-03-18 13:42:00

0

-1表示未找到,所以基本上id不存在于数组的项目中。

0意味着它已经在数组的第一个位置找到了id。您的代码中没有任何内容表明这会发生。

http://api.jquery.com/jQuery.inArray/

+0

'alert(client);'表示数组包含一个元素。 – 2011-03-18 13:38:51

0

的$ .inArray()方法类似于 JavaScript的原生.indexOf()方法 ,它返回-1,当它不 找到匹配。如果阵列中的第一个元素 匹配值, $ .inArray()返回0

因为JavaScript把0作为松散 等于假(即0 ==假的,但0 !==假),如果我们正在检查数组中的值 ,我们 需要检查它是否不等于(或大于 )-1。

3

$.inArray当找不到元素时返回-1。 我们可以看到你在用数组值填充客户端的位置吗?您可能无法正确填充阵列。

alert(client)不应该打印'17'它应该打印由逗号分隔的数组值。

编辑:我想通了什么可能的问题。如果client包含字符串'17',而不是数量17,因为17 !== '17'

例子:http://jsfiddle.net/ub6xX/1/

工作例如:http://jsfiddle.net/fkling/ub6xX/

+0

如果数组只包含一个值,17,那么输出它的确只有17个。 – 2011-03-18 13:38:31

+0

@Felix:我知道这一点。我需要更多的咖啡。 – 2011-03-18 13:39:19

0

我没有看到你在哪里,你都将标识加入客户端阵列你的例子我猜,因为你没有它在阵列中找不到它