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

Как вызвать функцию из прототипа (рекурсия)?

Все привет. Подскажите, как, в данном примере вызвать функцию из прототипа в её теле (рекурсия). Ниже эта же работающая функция, выше я указал в какой строке вопрос. Спасибо.
Array.prototype.flatten = function () {

    let result = [];

    this.forEach(i => {
        if (Array.isArray(i)) {
            // result = result.concat(Array.prototype.flatten(i));
            // result = result.concat(this.flatten(i));
            // ????
        } else {
            result.push(i);
        }
    })

    return result;
}

const a = [1, [2, ['3', 4, ['5'], [6, [7]]]], ['8']];

console.log(a.flatten()); // [1, 2, '3', 4, '5', 6, 7, '8']

/*
const f = function (a) {

    let result = [];

    a.forEach(i => {
        if (Array.isArray(i)) {
            result = result.concat(f(i));
        } else {
            result.push(i);
        }
    })

    return result;
}
*/
// console.log(f(a)); // [1, 2, '3', 4, '5', 6, 7, '8']
  • Вопрос задан
  • 129 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
https://developer.mozilla.org/ru/docs/Web/JavaScri...
https://developer.mozilla.org/ru/docs/Web/JavaScri...

А вообще, мутировать прототип не своих сущностей, а особенно глобальных - очень плохо, в лучшем случае Вас побьют, в худшем...
И главное зачем? Есть https://developer.mozilla.org/ru/docs/Web/JavaScri...

Ну и еще, у рекурсии есть ограничение на размер call stack, если это тестовое, то я бы обязательно вставил в проверку такой массивчик:
let arr = [1];
for (let i = 0; i < 65536; i++) arr = [arr];
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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