如何在 Javascript 中用 reduce() 方法模拟 join() 方法?
How can I simulate join() method with reduce() method in Javascript?
我想创建一个与 join() 方法功能相同的函数,但我不知道我做错了什么。
const join = (arr, separator) => {
return arr.reduce((separator, el) => el + separator, separator);
};
console.log(join([1, 2, 3], '-'));
它 returns 321- 而不是 1-2-3
只需要一点点调整:
const join = (arr, separator) => {
return arr.reduce((acc, el) => acc + separator + el);
};
console.log(join([1, 2, 3], '-'));
给你
const join = (arr, separator) => {
return arr.reduce((r, v) => r+= v + separator, "").slice(0,-1);
};
console.log(join([1, 2, 3], '-'));
这应该没问题。
const join = (arr, separator) => {
return arr.reduce((prev, curr, i) => prev + (i != 0 ? '-' : '') + curr, '')
}
console.log(join([1, 2, 3], '-'));
不要忘记检查索引是否为零,您不希望分隔符出现在第一个元素之前。
Reduce 从左到右工作,但参数的排序和命名可能会导致混淆。
reduce 回调有两个参数,第一个参数是 'accumulated value',第二个是数组的当前元素。这里的 'accumulated value' 将是您连接的字符串,因此您需要以正确的顺序构建它,以第一个数组元素而不是分隔符本身开始字符串。
因此,要完成此操作,请避免为 reduce
调用使用默认值,而是 return 连接的字符串(到目前为止)加上分隔符加上当前元素。确保也以某种方式处理空数组的情况。
const join = (arr, separator) => {
if (!arr.length) return "";
return arr.reduce((joined, el) => joined + separator + el);
};
console.log(join([1, 2, 3], '-'));
这是一个示例,其中我向 exampleJoin
函数添加了一些日志记录,因此您可以看到它在做什么。然后最下面还有一个final join
方法就是你要找的最后一个
const exampleJoin = (arr, separator) => {
return arr.reduce((acc, el ) => {
console.log(`string so far: '${acc}', Current element: '${el}'`)
return acc + el + separator
}, '');
};
const ret = exampleJoin([1, 2, 3], '-')
console.log(`ret value: ${ret}`)
console.log(`ret value after slice ${ret.slice(0,-1)}`)
const join = (arr, separator) => {
return arr.reduce((acc, el ) => acc + el + separator, '').slice(0,-1);
};
console.log(join([1, 2, 3], '-'));
acc
是到目前为止的累加值,el
是当前正在处理的元素,空字符串是累加器 acc
的初始值。 slice 就是去掉尾部的分隔符,这个方法会引入。
我想创建一个与 join() 方法功能相同的函数,但我不知道我做错了什么。
const join = (arr, separator) => {
return arr.reduce((separator, el) => el + separator, separator);
};
console.log(join([1, 2, 3], '-'));
它 returns 321- 而不是 1-2-3
只需要一点点调整:
const join = (arr, separator) => {
return arr.reduce((acc, el) => acc + separator + el);
};
console.log(join([1, 2, 3], '-'));
给你
const join = (arr, separator) => {
return arr.reduce((r, v) => r+= v + separator, "").slice(0,-1);
};
console.log(join([1, 2, 3], '-'));
这应该没问题。
const join = (arr, separator) => {
return arr.reduce((prev, curr, i) => prev + (i != 0 ? '-' : '') + curr, '')
}
console.log(join([1, 2, 3], '-'));
不要忘记检查索引是否为零,您不希望分隔符出现在第一个元素之前。
Reduce 从左到右工作,但参数的排序和命名可能会导致混淆。
reduce 回调有两个参数,第一个参数是 'accumulated value',第二个是数组的当前元素。这里的 'accumulated value' 将是您连接的字符串,因此您需要以正确的顺序构建它,以第一个数组元素而不是分隔符本身开始字符串。
因此,要完成此操作,请避免为 reduce
调用使用默认值,而是 return 连接的字符串(到目前为止)加上分隔符加上当前元素。确保也以某种方式处理空数组的情况。
const join = (arr, separator) => {
if (!arr.length) return "";
return arr.reduce((joined, el) => joined + separator + el);
};
console.log(join([1, 2, 3], '-'));
这是一个示例,其中我向 exampleJoin
函数添加了一些日志记录,因此您可以看到它在做什么。然后最下面还有一个final join
方法就是你要找的最后一个
const exampleJoin = (arr, separator) => {
return arr.reduce((acc, el ) => {
console.log(`string so far: '${acc}', Current element: '${el}'`)
return acc + el + separator
}, '');
};
const ret = exampleJoin([1, 2, 3], '-')
console.log(`ret value: ${ret}`)
console.log(`ret value after slice ${ret.slice(0,-1)}`)
const join = (arr, separator) => {
return arr.reduce((acc, el ) => acc + el + separator, '').slice(0,-1);
};
console.log(join([1, 2, 3], '-'));
acc
是到目前为止的累加值,el
是当前正在处理的元素,空字符串是累加器 acc
的初始值。 slice 就是去掉尾部的分隔符,这个方法会引入。