Номер JavaScript Разделить на отдельные цифры
Привет, Я пытаюсь решить математическую задачу, когда я беру число, например. 45 или 111, а затем разделить число на отдельные цифры, например. 4 5 или 1 1 1. Затем я сохраню каждое число в var, чтобы запустить метод. Кто-нибудь не знает, как разделить число на indivdual digitalals.
Например, у меня есть цикл, который выполняется в массиве:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
Для каждого номера я хотел бы разбить его цифры и добавить их вместе?
Ответы
Ответ 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