2010-05-14 43 views
7

匹配的值,以JSON數組值我有一個JSON數組,看起來像這樣:jQuery中

['Monkey','Cheetah','Elephant','Lizard','Spider'] 

我也有一個文字輸入。我想測試'模糊'上的輸入值是否也在數組中,如果它是做某事。

知道一個位蟒蛇的我想是這樣的:

var existing_animals = ['Monkey','Cheetah','Elephant','Lizard','Spider'] 
$('input').blur(function() { 
    user_animal = $(this).val() 
    if (user_animal in existing_animals) { 
    alert('Animal already exists!') 
    } 
}); 

那麼,如何新秀是我的錯?

+0

對不起,在標題和示例中的錯字 - 應該說'user_animal in existing_animals' – chrism 2010-05-14 14:05:33

+0

您發佈的代碼檢查existing_animals.Monkey(或等價地,existing_animals ['Monkey'])。數組將其存儲爲:existing_animals [0] ='Monkey';這不是聯想。我認爲korchev的解決方案是最好的解決方案(使用$ .inArray),但是您也可以像Matt所建議的那樣使它成爲聯想。 – RMorrisey 2010-05-14 14:23:18

回答

6

in運算符檢查字典(對象)中是否存在鍵。它現在可以用於數組。正確的方法是使用jQuery.inArray

if ($.inArray(user_animal, existing) > -1) { 
    alert('Animal already exists!') 
} 
+0

我知道我使用jQuery的原因,而其他答案可能是正確的,即使對我來說,這很簡單,謝謝 – chrism 2010-05-14 14:20:04

0

我相信你會發現在this article你的答案。

由於JSON評估爲一個數組,因此您應該查看indexOf函數。不知道你爲什麼在這裏提到python ..

4

in是檢查如果對象包括屬性,在這裏,因爲你使用的是數組。

如果你想用你的in,你可以這樣做:

var existing_animals = { 
    "Monkey":1, 
    "Cheetah":1 
}; 

等,那麼一切都將被罰款使用in,但是,它會更好地繼續使用您的陣列,並簡單地遍歷它。

$('input').blur(function() { 
    user_animal = $(this).val() 

    for (var i=0;i<existing_animals.length;i++) { 
    if (existing_animals[i] == user_animal) { 
     alert("Animal exists"); 

     break; 
    }; 
    }; 
}); 

的ECMA第5版引入了陣列的indexOf方法,所以它應該是那麼容易,因爲這樣做的:

if (existing_animals.indexOf(user_animal) != -1) { 
    alert("Animal exists"); 
}; 

然而,IE不支持這一點; you can implement it yourself though.

+0

我剛剛使用'in',因爲它是我在編寫python時使用的概念 – chrism 2010-05-14 14:15:53

+0

當然,我只是給關於如何進行工作的想法:) – Matt 2010-05-14 14:17:59