javascript - 有没有一种简单的方法可以将一个数字拆分为一个数字数组而不将其转换为字符串并返回?
问题描述
我正在做一个 Javascript 练习,该练习需要将数字转换为单个数字的数组,而我似乎实现这一目标的唯一方法是将数字转换为字符串,然后将其转换回数字。
let numbers = 12345;
Array.from(numbers.toString(10), Number) // [1, 2, 3, 4, 5]
基本上,我想知道这是否是在数字上实现这样的拆分的最佳方法,或者是否有更有效的方法不需要这种转换。
解决方案
你总是可以得到最小的数字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,您就必须将这些数字映射到适当的字母。
推荐阅读
- vb.net - 如何在 vb.net 的 datagrid 中绑定特定的 sql 列?
- solr - SolrCloud 重启后意外恢复
- excel - 运行时错误“1004”无法设置 Range 类的 NumberFormat 属性
- r - 使用 Shiny 设置 R 应用程序的输入
- r - 模拟时间序列时绘图不起作用
- python - 如何在函数中键入提示文件名?
- css - Firefox 错误或错误的 flex 样式?
- xml - 当 XSLT 中的子节点为空时递归删除节点
- javascript - 如果在 JSON 对象中找到密钥,则仅触发一次
- android - 将 Android HIDL 移动到供应商目录和权限问题