我想使用deluds编写一个联接功能。它需要两个参数,一个数组才能操作和一个定界符。该功能将返回字符串。定界符可以是可选的,如果没有给出,则应默认为','。
以下是我的代码:
var arrayOfStrings = ['a', 'b', 'c'];
function join (arr, delim=',') {
return arr.reduce((a,e) => {
return a+e+delim;
}, '')
}
当我调用输出'a,b,c'下方的功能时,看起来正确:
join(arrayOfStrings)
但是,当我在控制台内调用功能时,输出返回不正确;
console.log('should join elements in array together into a string: ',
join(arrayOfStrings) === 'a,b,c'
);
输出:
should join elements in array together into a string: false
=> undefined
'a,b,c,'
看起来正确
否,因为您当前的代码会导致尾随逗号,但是您希望没有尾随的逗号,因为它看起来是从测试中看的:
console.log('should join elements in array together into a string: ',
join(arrayOfStrings) === 'a,b,c'
);
我只有在累加器中已经有一些东西(因此在第一次迭代中不添加定界符(时,我只有有条件地添加定界符(:
var arrayOfStrings = ['a', 'b', 'c'];
function join(arr, delim = ',') {
return arr.reduce((a, item) => a ? a + delim + item : item, '');
/* equivalent to:
return arr.reduce((a, item) => {
if (a) {
// add delimiter before concatenating the next item if the "a" string is not empty
return a + delim + item;
} else {
return item;
}
}, '');
*/
}
console.log('should join elements in array together into a string: ',
join(arrayOfStrings) === 'a,b,c'
);
如果您知道arrayOfStrings
始终包含至少一个字符串,则可以避免将初始值传递给reduce
,并且会使用数组中的第一项,允许您无条件地将累加器与一个与一个累加器相关。定界符和下一个字符串:
var arrayOfStrings = ['a', 'b', 'c'];
function join(arr, delim = ',') {
return arr.reduce((a, item) => a + delim + item);
}
console.log('should join elements in array together into a string: ',
join(arrayOfStrings) === 'a,b,c'
);