Как уже упоминалось @charlietfl, вы перебираете массив и обновляете текст результата для каждого индекса.Поскольку вы никогда не останавливаете процесс зацикливания, на самом деле это означает, что вы всегда получаете результат только от последнего элемента в массиве.Если ваш "успех!"значение - это элемент 14 в массиве из 20 элементов, ваш результат будет соответствовать и передавать эту итерацию, но затем будет перезаписан на итерациях для следующих 5 элементов.Если последний элемент является условием успеха, вы всегда получите «Успех!»и если нет, вы всегда получите "Нет совпадений!"независимо от других элементов в списке.
Я предполагаю, что вы хотите определить, совпадает ли один из элементов в массиве, и если да, то вы хотите "Успех!"в качестве выхода.Если это так, я предлагаю:
const success = false;
const getDataVal = $("#getData").val();
if (getDataVal.length == 20) {
for(let k = 0; k < res.length; k++) {
if (res[k] == getDataVal) {
success = true;
break;
}
}
}
$("#result").html(success ? "Success!" : "No match!");
Я немного перестроил ваш код, чтобы помочь мне понять его.Обратите внимание, что я выполнил некоторые оптимизации:
- Переместил операцию $ ("# getData"). Val () из цикла и сохранил в переменной, так как значение не изменится.Это упрощает код и значительно упрощает работу процессора.
- Перемещено условие проверки длины значения вне цикла.Содержимое цикла будет выполняться только тогда, когда это условие истинно, поэтому лучше обернуть цикл в условие, чтобы он вообще никогда не запускался, если это условие не выполняется.
- Добавлен разрыв;в цикл, чтобы остановить цикл, как только будет найдено условие успеха
- Перемещен параметр #result за пределы цикла.Это нужно сделать только после того, как вы знаете ответ, а не на каждой итерации.
- Используйте троичную строку с простым логическим значением вместо строк, чтобы узнать состояние совпадения и выведите окончательную строку.
Если мое предположение верно, что вы действительно заинтересованы в знанииесли какой-либо элемент в массиве совпадает, то я предлагаю использовать метод some массива для его оценки.Это немного более выразительно и устраняет необходимость в циклической структуре.
let success = false;
const getDataVal = $("#getData").val();
if (getDataVal.length == 20) {
success = res.some(function (val)) {
return val == getDataVal;
});
}
$("#result").html(success ? "Success!" : "No match!");