我尝试编写自己的Array.prototype.join()有什么问题?

时间:2019-02-26 16:32:13

标签: javascript recursion join

我一直在尝试自己实现一堆高阶函数。只是为了好玩。

但是今天,我发现自己陷入了重现Array.join方法的尝试。

我给自己提出了一个挑战,即不使用任何循环,例如forwhile,使用尽可能少的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 :(得分:7)

您应该开始处理递归函数的结束情况,而不是其他情况。更容易:)

但是,您应该从第二个元素到最后一个切片,而不仅仅是第一个元素。

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