@k8tus

Как работает вот это место: [...rangeOfNumbers(startNum, endNum — 1), endNum]?

Помогите, пожалуйста, понять, что значит одно место в таком коде:

function rangeOfNumbers(startNum, endNum) {
return startNum === endNum ? [startNum]
: [...rangeOfNumbers(startNum, endNum - 1), endNum];
};

console.log(rangeOfNumbers(2,12))

Получается массив значений в указанном диапазоне: [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]
Я нашёл, что это называется спред, но что происходит у него в круглых скобках, и зачем ему конечное значение в конце? Большое спасибо, если кто-то поможет!
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 3
locky_yotun
@locky_yotun Куратор тега JavaScript
Я видел некоторый джаваскрипт
Ну раз вы поняли, что это спред — почитайте еще про него, ничего более подробного чем документация — нет:
https://developer.mozilla.org/ru/docs/Web/JavaScri... (ваш случай — в разделе "Более мощный литерал массива")

Если что — без спреда эта функция выглядит так:
function rangeOfNumbers(startNum, endNum) {
    if (startNum === endNum) {
        return [startNum];
    } else {
        const tmpRange = rangeOfNumbers(startNum, endNum - 1);
        return tmpRange.concat(endNum);
    }
}
Ответ написан
fomenkogregory
@fomenkogregory
Юниор софтварный инженер
Функция вызывает себя рекурсивно до тех пор, пока значения start и end не станут равны
https://learn.javascript.ru/recursion
https://learn.javascript.ru/destructuring-assignment
Ответ написан
@vladdimir
Верстальщик
[...rangeOfNumbers(startNum, endNum), endNum];
этот код ставит последним элементом массива endNum, а перед ним разворачивает рекурсивные вызовы самой себя. Три точки просто разворачивают массив, который возврашает функция.
const arr1 = [1,2]

const arr2 = [ ...arr1, 3,4] // [1,2,3,4]

C пониманием тернарного оператора, так понимаю все норм?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы