如果项目不存在,$ .inArray函数不返回“-1”

时间:2014-05-23 17:36:44

标签: javascript jquery arrays json

请看一下 FIDDLE 。为什么B项目不返回-1,因为它在字符串allergyfree中没有值“gluten”?

这是JSON文件:

[{"title":"A","allergyfree":"sugar,salt,yeast,wheat,gluten"},{"title":"B","allergyfree":"sugar,salt,starch,yeast,wheat,preservatives"}]

脚本:

$.ajax({
    url: "url.json",
    success: function (data) {

        $(data.query.results.json.json).each(function (index, item) { 
         var title = item.title;
         var allergyfree = item.allergyfree;           
         if(allergyfree.length !== 0) {

           allergyfree = allergyfree.split(",");

           $.each(allergyfree,function(i,allergy){

            $('.'+title+allergy).append(jQuery.inArray(allergy, allergyfree));

           });
          }

        });
    },
    error: function () {}
});

我问这个问题是因为我有一个问题要检查this thread中是否存在该值,有人建议使用inArray函数,但它无效。

1 个答案:

答案 0 :(得分:1)

如果您调试(或只是查看响应),您会发现您的ajax请求未返回Bgluten的条目。因此,inArraytitle的组合永远不会调用allergy。这就是为什么那个地方留空了。

事实上,您的代码保证您永远不会遇到inArray找不到条目的情况。 您正在同一个数组中搜索数组中的每个元素。很明显,元素将始终被找到。


您应该做的是循环查看您关注的所有过敏症的列表,然后在您的请求结果中检查这些过敏症。像这样:

var allergies = ["gluten", "yeast"];

$.ajax({
    /* ... */

    $.each(allergies,function(i,allergy){
        $('.'+title+allergy).append(jQuery.inArray(allergy, allergyfree));
    });

    /* ... */
});

http://jsfiddle.net/cYFLe/119/