@ThisFruit

Написал функцию рекурсивного сравнения значений 2 массивов, а она при любых значениях выдаёт undefined. Где ошибка?

let eqArr = (a, b) => {
    if (a.constructor === Array && b.constructor === Array) return a.reduce((bol, x, i)=> {bol && eqArr(x,b[i])}, true);
    console.log(x++)
    return (a === b);
}
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
Psixodelik
@Psixodelik
Преподаватель на Hexlet
Пожалуйста, форматируй код.

Так же потерял return внутри reduce.

Если хочешь использовать однострочник, то должно быть так:

a.reduce((bol, x, i) => bol && eqArr(x, b[i]), true)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@twoone
reduce не подходит так как в отличии от every будет выполнятся для всего массива даже если в встретит несоответствие в самом начале. Для проверки на принадлежность к массиву есть Array.isArray и ещё сразу проверять идентичность длины и её наличие.

const f = (a, b) => Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.length > 0 ? 
      a.every((item, index) => f(item, b[index])) :
      a === b;

console.log(f([0, 1, [3]], [0, 1, [3]]))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы