Задать вопрос
@dshulzhenko97

Задача из книги Javascript Для детей. Почему здесь возвращается true?

Привет. Я новичок. Прохожу книгу Javascript для детей. Почему в правильном варианте решения задачи условие проверяет каждый символ массива, и только тогда выдает true, а в моем решении если любой элемент массива == любому элементу массива с таким же индексом, то тоже будет true. т.е. игнорирует соответствие остальные элементов. Когда я ставлю условие не ==, а != и меняю местами return false и true, то все работает как надо. P.S. условие array1[i] == array2[i] сознательно опустил.

Задача: Напишите функцию areArraysSame, которая принимает два массива с числами в качестве аргументов. Она должна возвращать true, если эти массивы одинаковые (то есть содержат одни и те же числа в одном и том же порядке), или false, если массивы различаются. Убедитесь, что ваша функция работает правильно, запустив такой код:
areArraysSame([1, 2, 3], [4, 5, 6]);
false
areArraysSame([1, 2, 3], [1, 2, 3]);
true
areArraysSame([1, 2, 3], [1, 2, 3, 4]);
false
Подсказка 1: вам понадобится перебрать все значения из первого массива в цикле for и убедиться, что они совпадают со значениями из второго массива. Вы можете вернуть false прямо из тела for, если обнаружите несовпадающие значения.
Подсказка 2: вы можете сразу выйти из функции, пропустив цикл for, если у массивов разная длина

***

Вот правильное решение:

var areArraysSame = function (array1, array2) {
    for (var i = 0; i < array1.length; i++) {
        if (array1[i] !== array2[i] || array1.length !== array2.length) {
            return false;
        }
    }
    return true;
}

console.log(areArraySame([1, 2, 3], [1, 2, 5])); //false
console.log(areArraySame([1, 2, 3], [3, 2, 4])); // false
console.log(areArraySame([1, 2, 3], [4, 5, 6])); false
console.log(areArraySame([1, 2, 3], [1, 2, 3])); true


***
А вот мое. Почему если я просто написал условие не через !=, а через == везде выдает true если хотя бы один элемент из массива совпадает.

var areArraySame = function (array1, array2) {
    for (let i = 0; i < array1.length; i++) {
        if (array1[i] === array2[i]) {
            return true;
        }
    }
    return false;
}

console.log(areArraySame([1, 2, 3], [1, 2, 5])); //true
console.log(areArraySame([1, 2, 3], [3, 2, 4])); // true
console.log(areArraySame([1, 2, 3], [4, 5, 6])); // false
console.log(areArraySame([1, 2, 3], [1, 2, 3])); true
  • Вопрос задан
  • 434 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@dshulzhenko97 Автор вопроса
Я походу понял, в случае:
if (array1[i] === array2[i]) {
return true;
}

При первом true он возращает true, а в этом случае:
if (array1[i] !== array2[i] || array1.length !== array2.length) {
return false;
}

когда он встречает первое false Он уже возращает false, что логично.
Может объяснил непонятно, но вроде допер.
Ответ написан
@sasmoney
я тебе что ли компилятор
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект