36

我想将一个整数转换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;
4

18 回答 18

93

**** 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()方法从类数组或可迭代对象创建一个新的 Array 实例,字符串 '12345' 是一个可迭代对象,因此它将从中创建一个 Array。

3- 但是,在自动创建这个新数组的过程中,该Array.from()方法将首先将任何可迭代元素(在这种情况下为每个字符,例如:'1'、'2')传递给我们设置给他的函数作为第二个参数,这是Number这种情况下的功能

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

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

概括

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

于 2019-06-19T19:00:33.883 回答
28

我会去

var arr = n.toString(10).replace(/\D/g, '0').split('').map(Number);

replace如果您确定n没有小数,则可以省略。

于 2013-10-04T13:25:27.387 回答
6

我会这样做,以避免在不需要时使用字符串:

var n = 12345;
var arr = [];
while(n>0){arr.unshift(n%10);n=n/10|0;}
于 2013-10-04T13:38:46.333 回答
5
var n = 12345;
var arr = ('' + n).split('').map(function(digit)  {return +digit;});

不过,地图功能仅受最近的浏览器支持。

于 2013-10-04T13:21:48.227 回答
3

另一种方法是使用文字然后传播:

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

于 2020-06-01T14:07:19.390 回答
0

你们太棒了,有很多方法可以做到这一点。让我考虑一下这一点。如果这种方法有问题,请提供反馈。

    let fromNumberToArray = [...num.toString()].map(Number);
于 2021-06-18T06:37:29.383 回答
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));
于 2021-06-12T17:08:55.610 回答
0

提出的解决方案在大多数情况下都可以正常工作,但不能用于负数。

这种情况有解决方案。

const intToArray = (int) => {
  return String(int).match(/-?\d/g).map(Number)
}

console.log(intToArray(312)) // [3, 1, 2]
console.log(intToArray(-312)) // [-3, 1, 2]

于 2020-11-15T06:18:54.977 回答
0

无需字符串解决方案。

此方法比使用 toString 转换的方法快。大约3-4次。您可以在此处或下面的屏幕上查看基准。

在此处输入图像描述

const numberToArray = (number) => {
    var arr = [];
    while(number>0) { arr.push(number%10); number = number/10|0; }
    return arr.reverse();
}
于 2022-02-08T20:04:45.620 回答
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
})

于 2021-06-13T02:04:37.050 回答
0

使用地图(数字)。下面的代码片段可能会有所帮助。

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

于 2021-06-13T02:41:24.143 回答
0

可运行片段:

const n = 12345;
let toIntArray = (n) => ([...n + ""].map(Number));
console.log(toIntArray(n));

于 2019-03-07T03:58:15.037 回答
0

日期:24/07/2021

使用 ES6 方法 #2021

输入 = 12345

输出 = [1,2,3,4,5]

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

于 2021-07-24T06:05:49.640 回答
0

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

let dataArray = Array.from(value.toString());
于 2018-03-28T02:31:15.547 回答
0

首先,将整数转换为字符串 & 然后转换为数组。使用 map 函数,单个字符串在 parseInt 函数的帮助下转换为数字。最后,该数组作为结果返回。

const digitize = n => [...`${n}`].map(i => parseInt(i));
于 2019-07-26T09:11:49.053 回答
-1

您可以只使用 String() 方法。它转换为字符串,但您可以以数字形式使用它们。

let numbers = String(val);
console.log(numbers);
于 2021-01-15T08:54:06.120 回答
-1

这会成功的。

let n = 1234;
console.log(n.toString().split(''));
于 2021-12-25T10:26:50.227 回答
-1

这是我通常使用的两种方法。第一种方法:

function toArr1(n) {
    "use strict";
    var sum = 0;    
    n = Array.from(String(n), Number); 
       /*even if the type of (n) was a number it will be treated as a string and will 
    convert to an Array*/
    for (i = 0; i < n.length; i += 1) {
        sum += n[i];
    }
    return sum;
}

第二种方法:

function toArr2(n) {
    var sum = 0;
    n = n.toString().split('').map(Number);
    for (i = 0; i < n.length; i += 1) {
        sum += n[i]; 
    }
    return sum;
}
于 2020-10-19T18:51:49.380 回答