Где я могу разместить свое верное утверждение - PullRequest
0 голосов
/ 15 марта 2020

Это базовый c javascript вопрос, который я просто хочу лучше понять. Я пытаюсь понять, имеет ли значение, куда я помещаю свое верное истинное утверждение. Вот пример кода:

function isValid(input) {
    for (var i = 0; i < input.length - 2; i++) {
        var charOne = input.charAt(i);
        var charTwo = input.charAt(i + 1);
        var charThree = input.charAt(i + 2);

        if (charOne === charTwo && charOne === charThree) {
            return false;
        }
        return true;
    }

}

isValid("ABB");

Это возвращает true, но также возвращает true, если я помещу здесь выражение return true:

function isValid(input) {
    for (var i = 0; i < input.length - 2; i++) {
        var charOne = input.charAt(i);
        var charTwo = input.charAt(i + 1);
        var charThree = input.charAt(i + 2);

        if (charOne === charTwo && charOne === charThree) {
            return false;
        }
    }
    return true; // Moved this return statement
}

isValid("ABB");

Является ли один путь неправильным, а другой правильным?

Ответы [ 4 ]

1 голос
/ 15 марта 2020

второй, так как в первом после каждой итерации вы проверяете, равны ли символы, и он будет return false или return true в самой первой итерации. Во втором вы проверяете все комбинации, и если он никогда ложь, тогда это должно быть правдой.

1 голос
/ 15 марта 2020

Ваша первая версия, вы возвращаете true в течение l oop. Это означает, что ваш l oop будет выполняться только один раз и затем возвращаться. Это, вероятно, ошибка.

Ваша вторая версия, вероятно, верна. Оператор return true выполняется из функции после того, как for-l oop завершит все итерации с [i..length-2).

0 голосов
/ 15 марта 2020

Я не думаю, что кто-то не прав обязательно. Я на самом деле предпочитаю немного другой подход. Для наглядности я вообще сделаю что-то подобное. Так что это явно одно или другое. С возвратом очевидно, что вычисления внутри функции останавливаются в этой точке. Мне просто нравится, чтобы это выглядело очевидным.

        if(charOne === charTwo && charOne === charThree) {
          return false;
        } {
          return true;
        }
0 голосов
/ 15 марта 2020

Когда вы return внутри a для l oop, вы заканчиваете sh весь l oop и продолжаете вне его.

Таким образом, ответ зависит от того, хотите ли вы пропустить после выполнения оператора return выполнение возврата не то, что вам нужно.

Возврат, который вы поместили за пределы l oop, позволяет l oop завершить работу перед возвратом результат.

Примечание полезное ключевое слово, которое можно использовать внутри al oop, если вы хотите завершить sh итерацию, а не прерывать весь l oop, равную continue.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/continue

...