使用 reduce 组合一个累积字符串数组

eli*_*isa 6 javascript arrays reduce

我想为给定的数字返回类似 ['4', '42','420'] 的内容:420

我使用reduce来累积数字并使用索引来连接之前索引中的数字。前两次迭代工作正常,但在第三次迭代中,我无法思考如何处理结果,因为它是未定义的 =>[ '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)
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 3

如果您想收集数字的增量数字,我认为更清晰的方法是使用.map(或Array.from) 代替:在每次迭代中,将(字符串化)数字从索引 0 切片到当前索引。

function createArrayOfTiers(num) {
  const strNum = String(num);
  return [...strNum].map((_, i) => strNum.slice(0, i + 1));
}
console.log(createArrayOfTiers(420));
Run Code Online (Sandbox Code Playgroud)

要修复现有代码,您需要访问 Accumulator 的前一个元素而不是 的前一个元素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));
Run Code Online (Sandbox Code Playgroud)