Подтвердить что ты не робот

Как выделить целое число на отдельные цифры в массиве в JavaScript?

Это мой код:

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]

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

4b9b3361

Ответ 1

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

var n =  123456789;
var digits = (""+n).split("");

Ответ 2

(123456789).toString(10).split("")

^^ это вернет массив строк

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

^^ это вернет массив ints

Ответ 3

Как насчет:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]

Ответ 4

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

Вместо:

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

Рассмотрим:

(123456789).toString(10).split("").map(Number)

Ответ 5

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

Ответ 6

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

Ответ 7

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

const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]

Ответ 8

Move:

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

выше

var j = k / 10;

Ответ 9

var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]

Ответ 10

Это был 5+ год для этого вопроса, но он всегда приветствует эффективные способы кодирования/написания сценариев.

var n = 123456789;
var arrayN = ('${n}').split("").map(e => parseInt(e))

Ответ 11

Еще один метод здесь. Поскольку число в Javascript по умолчанию не разделяется, вам нужно сначала преобразовать число в строку.

var n = 123;
n.toString().split('').map(Number);

Ответ 12

В итоге я решил это следующим образом:

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

Ответ 13

Это очень просто: сначала преобразуйте число в строку с помощью метода toString() в JavaScript, а затем используйте метод split() для преобразования строки в массив отдельных символов.

Например, число равно нулю, тогда

const numberDigits = num.toString().split('');

Ответ 14

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

function convertNumberToDigitArray(number) {
    const arr = [];
    while (number > 0) {
        let lastDigit = number % 10;
        arr.push(lastDigit);
        number = Math.floor(number / 10);
    }
    return arr;
}

Ответ 15

const number = 1435;
number.toString().split('').map(el=>parseInt(el));

Ответ 16

let input = 12345664
const output = []
while (input !== 0) {
  const roundedInput = Math.floor(input / 10)
  output.push(input - roundedInput * 10)
  input = roundedInput
}
console.log(output)

Ответ 17

Это довольно коротко, используя деструктуризацию массива и шаблоны строк:

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

Ответ 18

Вы можете получить список строк из вашего числа, преобразовав его в строку, а затем разделив его пустой строкой. Результатом будет массив строк, каждая из которых содержит цифру:

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

ИЛИ на этом основании сопоставьте каждую строковую цифру и преобразуйте их в Number:

const intArr = '${num}'.split("").map(x => Number(x))

Ответ 19

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