将整数转换为数字数组的方法

48

我想将一个整数,比如12345,转换为类似于[1,2,3,4,5]的数组。

我已经尝试了下面的代码,但有没有更好的方法?

var n = 12345;
var arr = n.toString().split('');
for (i = 0; i < arr.length; i++) arr[i] = +arr[i] | 0;

一种更简单的方法是使用.map(Number).map(parseInt),但这不会像您的位运算那样将NaN转换为0 - Bergi
1
为什么需要 |0 - nnnnnn
1
@Bergi 在IE8中也不支持.map(Number) - Nick Orlando
1
实际上,你的代码很好,因为它是所有提出的解决方案中最快的... - Bergi
@Bergi.. 是的.. map 函数很慢 ._. - Psych Half
关于代码审查/代码改进的问题应该在[codereview.se]上提问。 - Wouter J
23个回答

118

**** 2019答案 ****

这一行代码就可以解决问题:

Array.from(String(12345), Number);

例子

const numToSeparate = 12345;

const arrayOfDigits = Array.from(String(numToSeparate), Number);

console.log(arrayOfDigits);   //[1,2,3,4,5]

解释

1- String(numToSeparate)会将数字12345转换为字符串,返回'12345'

2- Array.from()方法从类似数组或可迭代对象创建一个新的数组实例,字符串'12345'是一个可迭代对象,因此它将从中创建一个数组。

3- 在创建这个新数组的过程中,Array.from()方法会首先将任何可迭代元素(例如:'1'、'2')传递给我们声明为第二个参数的回调函数(在本例中就是Number函数)。这是可能的,因为字符串是一个“类似数组”的对象。 为了使它更简单,我们可以将回调声明为: Array.from(String(numToSeparate), n => Number(n)

4- Number函数将取任何字符串字符并将其转换为数字,例如:Number('1');将返回1

5- 这些数字将一个接一个地添加到一个新数组中,最终将返回这个数字数组。

摘要

代码行Array.from(String(numToSeparate), Number);将把数字转换成字符串,取该字符串的每个字符,将其转换为数字并放入一个新的数组中。最后,这个新的数字数组将被返回。


请提供一个解释,谢谢。 - shashi verma
1
@shashiverma 请告诉我是否添加的解释足够清楚 ;) - Juanma Menendez
1
谢谢Juanma,讲解得很清楚。我是一个初学者,对这个领域不太了解,之前不知道这个函数。你真的很懂JS,是个专业人士。 - shashi verma
非常感谢您的解释! - mend0k

33
我会选择。
var arr = n.toString(10).replace(/\D/g, '0').split('').map(Number);

如果你确定 n 没有小数,那么可以省略 replace


1
利用“Number”函数进行映射,聪明呢 :-) - LoremIpsum
1
能否解释一下 ".map(Number)"?其中的 "Number" 是什么意思? - Paul Kruger
1
@PaulKruger Number 函数 可以将字符串转换为数字。 - Bergi
@Bergi 哦,我明白了。谢谢! - Paul Kruger

11

如果不必要使用字符串,我会这样做:

var n = 12345;
var arr = [];
while(n>0){arr.unshift(n%10);n=n/10|0;}

8
var n = 12345;
var arr = ('' + n).split('').map(function(digit)  {return +digit;});

然而,只有较新版本的浏览器支持map函数。


4
我猜说“在MSIE8及以下版本中不支持map函数”会更加恰当。 - Zathrus Writer
3
IE8绝对不算是最近的浏览器。 - Étienne Miret
4
“Shimming it” 并不难。 - Bergi

5

日期:2021年7月24日

使用ES6方法 #2021

input = 12345

output = [1,2,3,4,5]

const input = 12345;
console.log(`${input}`.split('').map(Number));


5
使用文字量和展开运算符也是一种方法:

const n = 12345;
const arr = [...`${n}`].map(Number);
console.log(arr);


1

使用Map(Number)。下面的代码片段可能会有帮助。

 var num = 1230945;
 var result=num.toString().split('').map(Number);
 console.log(result);


0

我首先将数字转换为字符串,然后使用Array.from()将字符串转换为数组。

let dataArray = Array.from(value.toString());

0
您可以使用内置的 JS 方法 toString() 和 parseInt(),如下所示:
function toDigitsArr(num) {
  num = num.toString();
  let numArr = [];
  for (let i = 0; i < num.length; i++) {
    numArr[i] = parseInt(num[i]);
  }
  return numArr;
}
console.log(toDigitsArr(9119));

0

你可以像这样做

let n = 12345;
let arr = (""+n).split('');//HERE IS THE ARRAY
///Now for, for loop, you can do something like this
arr.map(element=>{
//Do Something
})


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接