Пожалуйста, взгляните на этот FIDDLE. Почему элемент B не возвращает -1
если у него нет значения "клейковины" в строке без allergyfree
?
Здесь файл 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 () {}
});
Я задаю этот вопрос, потому что у меня есть проблема, чтобы проверить, присутствует ли значение в этом потоке, и кто-то предлагает использовать функцию inArray
, но он не работает.
Если вы отлаживаете (или просто смотрите на ответ), вы обнаружите, что ваш запрос ajax не возвращает запись для B
и gluten
. Поэтому inArray
никогда не призывает к сочетанию title
и allergy
. Вот почему место для этого осталось пустым.
Фактически, ваш код гарантирует, что у вас никогда не будет случая, когда inArray
не найдет запись. Вы ищите каждый элемент в массиве внутри того же массива. Таким образом, элемент всегда будет найден.
Вместо этого вы должны перебирать список всех аллергии, о которых вы заботитесь, и затем проверять их в результате вашего запроса. Что-то вроде этого:
var allergies = ["gluten", "yeast"];
$.ajax({
/* ... */
$.each(allergies,function(i,allergy){
$('.'+title+allergy).append(jQuery.inArray(allergy, allergyfree));
});
/* ... */
});
if($.inArray(allergy,allergyfree) !== null) {$('.'+title+allergy).html('Yes') } else {$('.'+title+allergy).html('No') }
чтобы при отсутствии gluten
в B
показывалось "Нет"?
if ($.inArray(allergy,allergyfree)!=-1)
не работает, как ожидалось.