在json Array中搜索值

时间:2014-06-27 22:42:28

标签: jquery ajax json

我有一个json数组值,它们通过ajax调用动态填充并返回。此json数据可以包含任意数量的对象。例如,我的ajax调用返回了一系列宝石['ruby','emerald','topaz']。

在我的html页面上,我在页面的某处有一个文本输入,用户可以在其中添加新的gem。当用户添加一个gem(通过按钮点击)时,我想看看它是否已存在于我的json数组中。因此,如果用户输入'diamond',则最终应检查复选框。

我的代码:

  function AddGem(data){ //data is the dynamically populated data from my ajax call

                var gem = $("#Gem").val(); // this the text input value of the textbox where a user can enter a gem. I am checking the json array values against this value
                $("#Button").click(function() { //user clicks a button to add a gem to the input textbox
                    $.each(data, function (item) {
                        if(item === 'gem')
                        {
                            $("#Oldform").prop("checked", false); // leave checkbox unchecked
                        } else
                            {
                                $("#Oldform").prop("checked", true); //check check box
                            }   
                        });
                      });  
                    }

如何执行json数组的搜索?我是否需要先创建一个空数组,即。 data = [];?谢谢,

2 个答案:

答案 0 :(得分:0)

我认为你想使用gem变量而不是'gem'字符串。

类似的东西:

$("#Button").click(function() {
    $.each(data, function (item) {
        $("#Oldform").prop("checked", item === gem);
    });  
});

但请考虑使用indexOf

$("#Button").click(function() {
    $("#Oldform").prop("checked", data.indexOf(gem)>-1);
});

答案 1 :(得分:0)

为了搜索json数据,我使用了带有break语句的for循环。当数组中的元素(数据)与文本输入匹配时,for循环将退出。

var jsonData = null;

  function AddGem(data){
                jsonData = data;
                    $("#Button").click(function(){
                     for (var i = 0; i < data.length; i++){ 
                        if (data[i] == $("#Gem").val())
                       {
                        //leave check box unchecked
                        break;
                        }
                        else{
                        //check check box
                        }
                     }
                 });
              }