2011-03-18 142 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

我沒有看到你在哪裏,你都將標識加入客戶端陣列你的例子我猜,因爲你沒有它在陣列中找不到它