Что не так с моей попыткой написать свой собственный Array.prototype.join ()? - PullRequest
0 голосов
/ 26 февраля 2019

Я пытался реализовать несколько функций более высокого порядка самостоятельно.Просто для удовольствия.

Сегодня, однако, я застрял при попытке воспроизвести метод Array.join.

Я поставил перед собой задачу не использовать какие-либо циклы, такие какfor или while, используйте как можно меньше if операторов и уменьшите количество используемых переменных.

Ниже моя попытка:

Array.prototype.implode = function(glue) {
    return (function loop(arr, str) {
        return (arr.length > 1
            ? loop(arr.slice(0, 1), str + arr[0] + (glue || ''))
            : str);
    })(this, '');
};

const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(arr.implode('#')); // a#

1 Ответ

0 голосов
/ 26 февраля 2019

Вы должны начать обрабатывать конечный случай рекурсивной функции, чем другой.Это проще:)

Однако вы должны разрезать от второго элемента до конца, а не только от первого элемента.

Array.prototype.implode = function (glue) {
  return (function loop(array, glue) {
    return (
      array.length === 1
      ? array[0]
      : array[0] + glue + loop(array.slice(1), glue)
    )
  })(this, glue || '')
}

const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(arr.implode('#'));
// a#b#c#d#e#f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...