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

Jas*_*hte 3 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#
Run Code Online (Sandbox Code Playgroud)

0xc*_*m1z 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
Run Code Online (Sandbox Code Playgroud)

  • 这是一段性感的代码.感谢分享 (3认同)