我正在尝试实现相当于在executeprogram.com上回答测验的.join()功能。我的代码通过了测试,但看起来很难看。我以丑陋的方式解决的具体问题是:构造的函数采用数组和分隔符作为参数,但在构造结果连接输出时,不应将分隔符插入到数组的最后一项之后。这意味着我必须测试,当使用 迭代数组时,我是否位于最后一项(以便我可以跳过使用分隔符)[哎呀:请参阅下面的注释]。如果数组中存在重复值,则使用or不起作用。所以我创建了一个计数器。我不喜欢它。我希望得到有关如何做得更好的建议。这是代码:.reduce()join()reduce()indexOflastIndexOf
function join(arr, separator) {
let counter = 0;
if (arr.length === 0) { return(''); }
else {
return (
arr.reduce((accumulator, item) =>
{
if (counter === arr.length - 1) {
return accumulator + item;
} else {
counter += 1;
return accumulator + item + separator;
}
},
'')
);
}
}
Run Code Online (Sandbox Code Playgroud)
测试及其预期输出如下。同样,上面的函数通过了所有测试,但我认为必须有更好的方法。
> join(['a'], ',')
Expected: 'a'
> join(['a', 'b'], ',')
Expected: 'a,b'
> …Run Code Online (Sandbox Code Playgroud)