首页 > 解决方案 > 有没有一种简单的方法可以将一个数字拆分为一个数字数组而不将其转换为字符串并返回?

问题描述

我正在做一个 Javascript 练习,该练习需要将数字转换为单个数字的数组,而我似乎实现这一目标的唯一方法是将数字转换为字符串,然后将其转换回数字。

let numbers = 12345;

Array.from(numbers.toString(10), Number) // [1, 2, 3, 4, 5]

基本上,我想知道这是否是在数字上实现这样的拆分的最佳方法,或者是否有更有效的方法不需要这种转换。

标签: javascriptarraysnumbers

解决方案


你总是可以得到最小的数字n % 10。您可以通过减法和除以 10(或除法和底数)来删除此数字。这使得一个非常简单的循环:

function digits(numbers){
  if (numbers == 0) return [numbers]
  let res = []
  while (numbers){
    let n = numbers % 10
    res.push(n)
    numbers = (numbers - n) / 10
  }
  return res.reverse()
}

console.log(digits(1279020))

这会以相反的顺序获取数字,因此您要么必须unshift将结果放到数组中,要么在最后推送和反转。

这样做的好处之一是,您可以通过换出10您选择的基数来找到不同基数的数字:

function digits(numbers, base){
  if (numbers == 0) return [numbers]
  let res = []
  while (numbers){
    let n = numbers % base
    res.push(n)
    numbers = (numbers - n) / base
  }
  return res.reverse()
}
// binary
console.log(digits(20509, 2).join(''))
console.log((20509).toString(2))

// octal
console.log(digits(20509, 8).join(''))
console.log((20509).toString(8))

尽管一旦您的基数大于 10,您就必须将这些数字映射到适当的字母。


推荐阅读