javascript - 使用 reduce 来组合累积字符串数组
我想针对给定的数字返回类似这样的内容 ['4', '42','420']:420
我正在使用 reduce 来累加数字,并使用索引将前面的数字连接起来。前两次迭代工作正常,但在第三次迭代时,我不知道如何处理结果,因为它是 undefined => [ '4', '42', '4,42undefined' ]
有什么想法吗?
function createArrayOfTiers(num) {
const onArray = String(num).split('')
onArray.reduce((acc, curr, index) => {
if (!index) return curr
const newAcc = [...acc, acc + curr[index -1]]
return newAcc
},[])
}
createArrayOfTiers(420)答案#1
如果你想收集一个数字的增量数字,我认为更清晰的方法是使用 .map(或 Array.from):在每次迭代中,从索引 0 到当前索引切片(字符串化的)数字。
function createArrayOfTiers(num) {
const strNum = String(num);
return [...strNum].map((_, i) => strNum.slice(0, i + 1));
}
console.log(createArrayOfTiers(420));要修复你现有的代码,你需要访问累加器的前一个元素,而不是curr的前一个元素(这实际上没有意义),将其乘以10,然后加上正在迭代的数字。同时确保返回构建好的数组:
function createArrayOfTiers(num) {
const onArray = String(num).split('')
return onArray.reduce((acc, curr, index) => {
if (!index) return Number(curr);
return [...acc, acc[index - 1] * 10 + Number(curr)];
}, [])
}
console.log(createArrayOfTiers(420));答案#2
你出现错误是因为在第三次迭代时忘记取第一个数字。你使用了acc + curr[index - 1],但忘记了acc + curr[index - 2]。
要修复它,你可以把数字从第一个到当前的切片,然后再把它们连接起来。
function createArrayOfTiers(num) {
const onArray = String(num).split("");
return onArray.reduce((acc, curr, index, arr) => {
const newAcc = [...acc, arr.slice(0, index + 1).join("")];
return newAcc;
}, []);
}
console.log(createArrayOfTiers(420));