Как разделить целое число на отдельные цифры в массиве в JavaScript? - PullRequest
44 голосов
/ 28 марта 2012

Это мой код:

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]

Если кто-то может увидеть проблему или найти лучшее решение, ябыл бы очень признателен!

Ответы [ 17 ]

70 голосов
/ 28 марта 2012

Почему бы просто не сделать это?

var n =  123456789;
var digits = (""+n).split("");
45 голосов
/ 28 марта 2012
(123456789).toString(10).split("")

^^ это будет возвращать массив строк

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

^^ это будет возвращать массив целых чисел

30 голосов
/ 23 апреля 2017

А как же:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
26 голосов
/ 03 января 2014

Я понимаю, что об этом спрашивали несколько месяцев назад, но у меня есть дополнение к ответу samccone, которое является более кратким, но у меня нет представителя, который можно добавить в качестве комментария!

Вместо:

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

Рассмотрим:

(123456789).toString(10).split("").map(Number)
6 голосов
/ 05 августа 2018

Немного изменил приведенный выше ответ. На самом деле нам не нужно явно вызывать метод 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]
3 голосов
/ 26 февраля 2016

const toIntArray = (n) => ([...n + ""].map(v => +v))
1 голос
/ 10 апреля 2018

Вот альтернатива Nicolás Fantone .Вы могли бы утверждать, что это может быть немного менее читабельным.Акцент делается на то, что Array.from () может принимать необязательную функцию map в качестве параметра.Таким образом, производительность повышается, поскольку промежуточный массив не создается.

const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]
0 голосов
/ 10 мая 2019
let input = 12345664
const output = []
while (input !== 0) {
  const roundedInput = Math.floor(input / 10)
  output.push(input - roundedInput * 10)
  input = roundedInput
}
console.log(output)
0 голосов
/ 29 апреля 2019

Это будет работать для числа больше 0. Вам не нужно преобразовывать число в строку:

function convertNumberToDigitArray(number) {
    const arr = [];
    while (number > 0) {
        let lastDigit = number % 10;
        arr.push(lastDigit);
        number = Math.floor(number / 10);
    }
    return arr;
}
0 голосов
/ 07 мая 2019
const number = 1435;
number.toString().split('').map(el=>parseInt(el));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...