我想做一個與 join() 方法相同的函式,但我不知道我做錯了什么。
const join = (arr, separator) => {
return arr.reduce((separator, el) => el separator, separator);
};
console.log(join([1, 2, 3], '-'));
它回傳 321- 而不是 1-2-3
uj5u.com熱心網友回復:
這是一個示例,我在exampleJoin函式中添加了一些日志記錄,以便您可以看到它在做什么。然后在底部有一個最終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正在處理的當前元素,空字串是 accumulator 的初始值acc。切片是洗掉此方法將引入的尾隨分隔符。
uj5u.com熱心網友回復:
Reduce 作業從左到右,但引數的排序和命名可能會導致混淆。
reduce 回呼有兩個引數,第一個引數是“累計值”,第二個是陣列的當前元素。這里的“累積值”將是您連接的字串,因此您需要以正確的順序構建它,從第一個陣列元素開始字串,而不是分隔符本身。
因此,要實作這一點,請避免使用reduce呼叫的默認值,而是回傳連接的字串(到目前為止)加上分隔符加上當前元素。確保也以某種方式處理空陣列的情況。
const join = (arr, separator) => {
if (!arr.length) return "";
return arr.reduce((joined, el) => joined separator el);
};
console.log(join([1, 2, 3], '-'));
uj5u.com熱心網友回復:
只需要一點點調整:
const join = (arr, separator) => {
return arr.reduce((acc, el) => acc separator el);
};
console.log(join([1, 2, 3], '-'));
uj5u.com熱心網友回復:
干得好
const join = (arr, separator) => {
return arr.reduce((r, v) => r = v separator, "").slice(0,-1);
};
console.log(join([1, 2, 3], '-'));
uj5u.com熱心網友回復:
這應該可以正常作業。
const join = (arr, separator) => {
return arr.reduce((prev, curr, i) => prev (i != 0 ? '-' : '') curr, '')
}
console.log(join([1, 2, 3], '-'));
不要忘記檢查索引是否為零,您不希望分隔符出現在第一個元素之前。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/432313.html
標籤:javascript 加入 减少
上一篇:通過時區處理SQL連接
