在javascript中使用reduce模拟连接函数

ttvkxqim  于 2023-01-11  发布在  Java
关注(0)|答案(3)|浏览(114)

我想在javascript中用reduce来模拟join函数,代码如下:

function join(arr, separator) {
    return arr.reduce((a, item) => (a ? a + separator + item : item), "");
}

但是当我尝试join(['', '', ''], ',')时,代码产生了''。我不明白为什么我的代码不输出',,'。

vngu2lb8

vngu2lb81#

您的代码问题是
a-a +分隔符+项目:项目
您正在验证值,但需要验证索引。

想法:

  • 您需要在两个值之间添加分隔符。
  • 要么放在前面,要么放在后面。
  • 对于之前添加,您必须跳过第一次迭代。
  • 要在后面添加,必须跳过最后一个值
function join(arr, separator) {
  return arr.reduce((acc, item, index) =>
    `${acc}${!index ? '': separator}${item}`,
    ''
  )
}

console.log(join(['', '', '', ''], ','))
af7jpaap

af7jpaap2#

Javascript不会将''计算为真实值,因此不会计算表达式a + separator + item,而总是返回item
如果输入如下所示的值,代码应该可以正常工作:join(['a', 'b', 'c'], ',')。但是,如果您希望join(['', '', ''], ',')返回为',,,',则可以将代码更改为如下所示:

function join(arr, separator) {
    return arr.reduce((a, item) => ((a !== null || a !== undefined) ? a + separator + item : item), "");
}
rta7y2nd

rta7y2nd3#

尝试以下给定代码-

function join(arr, separator) {
    let result = arr.reduce(function (s, a) {
        return s + (a ? a + separator : a);
    }, '');
    
    console.log(result);    
}

在您的代码中,您为reducer函数使用了错误的参数。
第一个arg是reducer函数正在处理的reducer函数的当前结果(可以将其视为内部函数结果的当前累加),第二个arg是当前数组元素。

相关问题