我一直在尝试自己实现一堆高阶函数。只是为了好玩。
但是今天,我发现自己陷入了重现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#
答案 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