Условия доказательства сбивают с толку - PullRequest
0 голосов
/ 25 августа 2018

Дано res[]:

for(let k = 0; k < res.length; k++){
    if($("#getData").val().length == 20){

      //if ((res[k]) != $("#getData").val()) helpText = "No match!";
      // -- Tried this too and a several other options - foreach, else, else if e. g.
      if(!((res[k]) == $("#getData").val()))
        resText = "No match!";
      if((res[k]) == $("#getData").val())
        resText = "Success!";

    $("#result").html(resText);
    }
}

Если определено условие !((res[k]) == $("#getData").val()) - "false", оно всегда делает действительным только первый элемент res[0] в массиве.Этот пункт можно проверить корректно - массив не повторяется.

Если условие - "false" задано , а не , все работает нормально, если определено только условие "true".Но на этом пути нет resText == "No match!";

Что не так ...?

1 Ответ

0 голосов
/ 25 августа 2018

Как уже упоминалось @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!");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...