74

到目前为止,这是我的代码:

var n = 123456789;
var d = n.toString().length;
var digits = [];
var squaredDigits = [];
for (i = d; i >= 1; i--) {
    var j = k / 10;
    var r = (n % k / j) - 0.5;
    var k = Math.pow(10, i);
    var result = r.toFixed(); 
    digits.push(result);
}

console.log(digits);

但是当我运行我的代码时,我得到了这个:[9, 1, 2, 3, 4, 5, 6, 7, 8]

如果有人能看到问题或找到更好的解决方案,我将不胜感激!

4

24 回答 24

101

为什么不这样做呢?

var n =  123456789;
var digits = (""+n).split("");
于 2012-03-28T19:18:44.130 回答
88

关于什么:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
于 2017-04-23T16:49:59.173 回答
56
(123456789).toString(10).split("")

^^ 这将返回一个字符串数组

(123456789).toString(10).split("").map(function(t){return parseInt(t)})

^^ 这将返回一个整数数组

于 2012-03-28T19:20:38.073 回答
27

我意识到这是几个月前问过的,但我对 samccone 的回答有一个更简洁的补充,但我没有代表可以添加评论!

代替:

(123456789).toString(10).split("").map(function(t){return parseInt(t)})

考虑:

(123456789).toString(10).split("").map(Number)
于 2014-01-02T21:36:37.837 回答
19

稍微修改了上面的答案。我们实际上不必显式调用“map”方法,因为它已经作为第二个参数内置在“Array.from”中。从MDN开始。

Array.from(arrayLike[, mapFn[, thisArg]])

let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]
于 2018-08-04T23:39:23.117 回答
5

const toIntArray = (n) => ([...n + ""].map(v => +v))

于 2016-02-26T12:28:53.510 回答
4

使用数组解构和字符串模板非常短:

const n = 12345678;
const digits = [...`${n}`];
console.log(digits);

于 2019-09-12T13:35:43.630 回答
3

假设值n

const n = 123456789

如果您愿意,可以使用最小的 ES6 版本:

String(n).split("").map(Number)

一个更短但可读性更低的版本:

[...String(n)].map(Number)

想要更短(但可读性更差)?

[...`${n}`].map(Number)

你说的更短(而且基本上难以辨认)!?

[...""+n].map(Number)

现在你是一个真正的程序员,恭喜!

边注

由于您分配的是 2 个数组而不是 1 个数组,因此这些并不是真正有效的(与此线程中的大多数情况一样)。想要更高效吗?试试这个只分配一个数组:

var arr = []
var str = String(n)
for (var i = 0; i < str.length; i++) {
  arr.push(Number(str[i]))
}

老派但更有效率,huzzah!

于 2021-03-11T22:04:44.647 回答
2

您可以从您的号码中获取字符串列表,方法是将其转换为字符串,然后将其拆分为空字符串。结果将是一个字符串数组,每个字符串都包含一个数字:

const num = 124124124
const strArr = `${num}`.split("")

或以此为基础,映射每个字符串数字并将它们转换为Number

const intArr = `${num}`.split("").map(x => Number(x))
于 2019-10-07T15:25:16.033 回答
2

这适用于大于 0 的数字。您不需要将数字转换为字符串:

function convertNumberToDigitArray(number) {
    const arr = [];
    while (number > 0) {
        let lastDigit = number % 10;
        arr.push(lastDigit);
        number = Math.floor(number / 10);
    }
    return arr;
}
于 2019-04-28T23:10:34.557 回答
2

这很简单,首先使用 JavaScript 中的toString()方法将数字转换为字符串,然后使用split()方法将字符串转换为单个字符的数组。

例如,数字是num,那么

const numberDigits = num.toString().split('');
于 2019-04-20T16:58:14.133 回答
1

这是Nicolás Fantone答案的替代方案。您可能会争辩说它的可读性可能会差一些。重点是 Array.from() 可以将可选的 map 函数作为参数。由于没有创建中间数组,因此这种方式可以获得一些性能提升。

const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]
于 2018-04-10T04:11:23.243 回答
1
const number = 1435;
number.toString().split('').map(el=>parseInt(el));
于 2019-05-07T12:29:17.993 回答
1

认为,

let a = 123456

首先,我们将其转换为字符串,然后应用 split 将其转换为字符数组,然后对其进行映射以将数组转换为整数。

let b = a.toString().split('').map(val=>parseInt(val))
console.log(b)
于 2021-02-05T11:16:10.583 回答
0

移动:

var k = Math.pow(10, i);

以上

var j = k / 10;
于 2012-03-28T19:49:51.500 回答
0
var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
于 2017-05-23T10:22:25.683 回答
0

这个问题已经 5 年多了,但总是欢迎使用有效的编码/脚本方法。

var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))
于 2018-03-06T09:31:26.850 回答
0
let input = 12345664
const output = []
while (input !== 0) {
  const roundedInput = Math.floor(input / 10)
  output.push(input - roundedInput * 10)
  input = roundedInput
}
console.log(output)
于 2019-05-10T18:26:32.207 回答
0

在 ES2015 中使用字符串插值进行更新。

const num = 07734;
let numStringArr = `${num}`.split('').map(el => parseInt(el)); // [0, 7, 7, 3, 4]
于 2020-02-08T21:02:28.670 回答
0
var n = 38679;
var digits = n.toString().split("");
console.log(digits);

现在数字 n 被除以它的位数,它们呈现在一个数组中,并且该数组的每个元素都是字符串格式。要将它们转换为数字格式,请执行以下操作:

var digitsNum = digits.map(Number);
console.log(digitsNum);

或者从开头获取一个包含所有数字格式元素的数组:

var n = 38679;
var digits = n.toString().split("").map(Number);
console.log(digits);
于 2021-02-14T23:11:42.230 回答
0

这实际上是我认为最干净的解决方案。

  var n =  123456789;
  const digits = (`${n}`).split('')

你把它放在一个字符串文字中,但它被保存为数字,然后它被拆分为一个数组并分配给数字。

于 2021-05-19T19:03:10.870 回答
0

我最终解决它如下:

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

于 2019-03-07T03:52:11.733 回答
0

这里还有另一种方法。由于 Javascript 中的数字默认是不可拆分的,所以需要先将数字转换成字符串。

var n = 123;
n.toString().split('').map(Number);
于 2018-08-17T13:06:31.763 回答
-1

const toIntArray = (n) => ([...n + ""].map(v => +v))

于 2019-01-05T14:59:42.873 回答