Номер JavaScript разбит на отдельные цифры - PullRequest
48 голосов
/ 16 октября 2011

Привет, я пытаюсь решить математическую задачу, где я беру число, например, 45 или 111, а затем делю число на отдельные цифры, например, 4 5 или 1 1 1. Затем я сохраню каждое число в переменную для запускаметод на.Кто-нибудь знает, как разбить число на отдельные цифры.

Например, у меня есть цикл, который запускается в массиве:

for (var i = 0; i < range.length; i++) {
var n = range[i];   
}

Для каждого числа я хотел бы разбить его цифры и сложить их вместе?

Ответы [ 23 ]

69 голосов
/ 16 октября 2011

var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);
54 голосов
/ 16 октября 2011
var number = 12354987,
    output = [],
    sNumber = number.toString();

for (var i = 0, len = sNumber.length; i < len; i += 1) {
    output.push(+sNumber.charAt(i));
}

console.log(output);

/* Outputs:
 *
 * [1, 2, 3, 5, 4, 9, 8, 7]
 */ 

ОБНОВЛЕНИЕ: Расчет суммы

for (var i = 0, sum = 0; i < output.length; sum += output[i++]);
console.log(sum);

/*
 * Outputs: 39
 */
22 голосов
/ 16 октября 2011

Вы также можете сделать это "математическим" способом, не обрабатывая число как строку:

var num = 278;
var digits = [];
while (num > 0) {
    digits.push(num % 10);
    num = parseInt(num / 10);
}
digits.reverse();
console.log(digits);

Один из преимуществ, который я вижу, заключается в том, что вам не нужно вводить parseInt() для каждой цифры, вы имеете дело с действительными цифрами в виде числовых значений.

12 голосов
/ 06 января 2018

Это самое короткое, что я нашел, хотя он возвращает цифры в виде строк:

let num = 12345;

[...num+''] //["1", "2", "3", "4", "5"]

Или используйте это, чтобы получить целые числа:

[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]
9 голосов
/ 16 октября 2011

Я приведу вариант ответа на уже предоставленный ответ, чтобы вы могли увидеть другой подход, сохраняющий числовой тип на протяжении всего времени:

var number = 12354987,
    output = [];

while (number) {
    output.push(number % 10);
    number = Math.floor(number/10);
}

console.log(output.reverse().join(',')); // 1,2,3,5,4,9,8,7

Я использовал метод, такой как приведенный выше, для хорошего эффектапри преобразовании числа в римские цифры, это один из моих любимых способов начать изучать язык программирования, с которым я не знаком.Например, вот как я разработал способ преобразования чисел в римские цифры с помощью Tcl 10 лет назад: http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/

Схожие строки в моем Tcl-скрипте:

  while {$arabic} {
    set digit [expr {$arabic%10}]
    set arabic [expr {$arabic/10}]
4 голосов
/ 05 мая 2017

// Split positive integer n < 1e21 into digits:
function digits(n) {
  return Array.from(String(n), Number);
}

// Example:
console.log(digits(1234)); // [1, 2, 3, 4]
4 голосов
/ 16 октября 2011

Вы можете работать со строками вместо чисел, чтобы достичь этого. Вы можете сделать это так

(111 + '').split('')

Это вернет массив строк ['1','1','1'], для которых вы можете выполнить итерацию и вызвать метод parseInt.

parseInt('1') === 1

Если вы хотите получить сумму отдельных цифр, вы можете использовать функцию уменьшения (реализованную в Javascript 1.8) следующим образом:

(111 + '').split('').reduce(function(previousValue, currentValue){  
  return parseInt(previousValue,10) + parseInt(currentValue,10);  
})
2 голосов
/ 15 февраля 2019

Веселое введение в рекурсию.Этот ответ принимает число и возвращает массив цифр числа. не преобразует число в строку в качестве промежуточного шага.

Учитывая n = 1234,

  • n % 10 вернется первым (справа-влажно)), 4
  • n / 10 вернет 123 с некоторым остатком
  • Используя Math.floor, мы можем отрубить остаток
  • Повторяя эти шаги, мыможет сформировать весь результат

Теперь нам просто нужно построить условие рекурсии,

  • Если число уже является одной цифрой (n <10), вернуть массивсинглтон цифры </li>
  • в противном случае (индуктивный) число равно 10 или больше;повторить и добавить к первой цифре

const digits = (n = 0) =>
  n < 10
    ? [ n ]
    : [ ... digits (Math.floor (n / 10)), n % 10 ]

console.log (digits ())        // [ 0 ]
console.log (digits (1))       // [ 1 ]
console.log (digits (12))      // [ 1, 2 ]
console.log (digits (123))     // [ 1, 2, 3 ]
console.log (digits (11234))   // [ 1, 2, 3, 4 ]

console.log (digits (123456789012))
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2 ]
1 голос
/ 18 января 2016

Мастер теней, расширенная версия от Orien

var num:Number = 1523;
var digits:Array = [];
var cnt:int = 0;
while (num > 0) {
    var mod:int = num % 10;
    digits.push(mod * Math.pow(10, cnt))

    num = Math.floor(num / 10);
    cnt++;
}
digits.reverse();
trace(digits);

Выход: 1000,500,20,3

1 голос
/ 18 марта 2014

Разделяйте каждые 2 параметра.

function separator(str,sep) {
    var output = '';
    for (var i = str.length; i > 0; i-=2) {
        var ii = i-1;
        if(output) {
            output = str.charAt(ii-1)+str.charAt(ii)+sep+output;
        } else {
            output = str.charAt(ii-1)+str.charAt(ii);
        }            
    }
    return output;
}
console.log(separator('123456',':')); //Will return 12:34:56
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...