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

Номер JavaScript Разделить на отдельные цифры

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

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

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

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

4b9b3361

Ответ 1

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
 */

Ответ 2

var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);

Ответ 3

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

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

Ответ 4

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

let num = 12345;

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

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

[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]

Ответ 5

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

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}]

Ответ 6

Для достижения этой цели вы можете работать с строками вместо цифр. Вы можете сделать это так:

(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);  
})

Ответ 7

// 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]

Ответ 8

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

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

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

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

  • Если число уже представляет собой одну цифру (n <10), вернуть массив из одной цифры
  • в противном случае (индуктивное) число равно 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 ]

Ответ 9

Отделите каждый 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

Ответ 10

Теневой мастер, расширенная версия 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

Ответ 11

Я использовал этот простой способ сделать это.

Разделить цифры

var N = 69;
var arr = N.toString().split('').map(Number)
// outputs [6,9]
console.log( arr ); 

Чтобы добавить их вместе

console.log(arr.reduce( (a,b) => a+b )); // 15

Ответ 12

Без преобразования в строку:

function toDigits(number) {
    var left;
    var results = [];

    while (true) {
        left = number % 10;
        results.unshift(left);
        number = (number - left) / 10;
        if (number === 0) {
            break;
        }
    }

    return results;
}

Ответ 13

И самый простой.... num_string.split('').map(Number)

Попробуйте ниже:

console.log((''+123).split('').map(Number))

Ответ 14

В ES6 вы можете использовать Array.from со Array.from числом в качестве итераций и Number качестве функции отображения.

const getDigits = n => Array.from(n.toString(), Number);

console.log(getDigits(12345));

Ответ 15

var num = 111,
 separateDigits = num.toString().split(""), i, l = separateDigits.length;

for( i = 0; i < l; ++i ) {
someObject.someMethod( +separateDigits[i] );
}

Ответ 16

Функциональный подход для получения цифр от number состоял бы в том, чтобы получить string из вашего number, разбить его на array (символов) и отобразить каждый элемент обратно в число.

Например:

var number = 123456;

var array = number.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
});

console.log(array); // returns [1, 2, 3, 4, 5, 6]

Если вам также необходимо суммировать все цифры, вы можете добавить reduce() к предыдущему коду:

var num = 123456;

var array = num.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
})
.reduce(function(previousValue, currentValue, index, array) {
  return previousValue + currentValue;
}, 0);

console.log(array); // returns 21

В качестве альтернативы, с ECMAScript 2015 (6-е издание), вы можете использовать функции стрелок:

var number = 123456;
var array = number.toString().split('').map((item, index) => parseInt(item));
console.log(array); // returns [1, 2, 3, 4, 5, 6]

Если вам нужно суммировать все цифры, вы можете добавить метод reduce() к предыдущему коду:

var num = 123456;

var result = num.toString()
.split('')
.map((item, index) => parseInt(item))
.reduce((previousValue, currentValue) => previousValue + currentValue, 0);

console.log(result); // returns 21

Ответ 17

Вы можете попробовать это.

  var num = 99;

  num=num.toString().split("").map(value=>parseInt(value,10)); //output [9,9]

Надеюсь, это помогло!

Ответ 18

function iterateNumber(N, f) {
    let n = N;
    var length = Math.log(n) * Math.LOG10E + 1 | 0;
    for (let i = 0; i < length; i++) {
        const pow = Math.pow(10, length - i - 1)
        let c = (n - (n % pow)) / pow
        f(c, i)
        n %= pow
    }
}

Ответ 19

Чтобы просто разбить целое число на отдельные цифры в том же порядке, я использовал и предпочел Регулярное выражение, поскольку оно предотвращает вероятность потери идентичности чисел даже после того, как они были преобразованы в строку.

Следующая строка кода преобразует целое число в строку, использует регулярное выражение для сопоставления с любой отдельной цифрой в строке и возвращает массив из них, после чего этот массив отображается для преобразования обратно в числа.

const digitize = n => String(n).match(/\d/g).map(Number);

Ответ 20

('' + 123456789).split('').map( x => +x).reduce( (a,b) => a+b ) === 45

правда

или без карты

('' + 123456789).split('').reduce( (a,b) => (+a)+(+b) ) === 45

правда

Ответ 21

Вы можете сделать это в одной строке, разделить каждую цифру, а затем сложить их вместе:

var may = 12987;
var sep = (""+may).split("").map(n=>+n).reduce((a,b)=>a+b);

Ответ 22

Это мое короткое решение.. с суммой чисел

    function sum (num) {
    let sNumber = num
        .toString()
        .split('')
        .reduce((el1, el2) => {
            return Number(el1) + Number(el2)
        }, 0)
        return sNumber
     }

console.log (сумма (123))
console.log (сумма (456))

Ответ 23

Javascript имеет функцию для этого, и вы можете легко использовать его.

console.log(new Intl.NumberFormat().format(number));

например:

console.log(new Intl.NumberFormat().format(2334325443534));
==> 2,334,325,443,534

Ответ 24

Более элегантный способ с ES6:

const int = 123;
for (let d of int.toString()) {
    console.log(d);
}
// 1
// 2
// 3