Numero JavaScript suddiviso in singole cifre

Ciao Sto cercando di risolvere un problema di matematica dove prendo un numero es. 45 o 111 e poi divido il numero in cifre separate, ad es. 4 5 o 1 1 1. Quindi salverò ogni numero in una var per eseguire un metodo. Qualcuno non sa come dividere un numero in cifre digitali individuali.

Ad esempio, ho un ciclo che gira su un array:

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

Per ogni numero vorrei dividere le sue cifre e aggiungerle insieme?

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

AGGIORNAMENTO: calcolo di una sum

 for (var i = 0, sum = 0; i < output.length; sum += output[i++]); console.log(sum); /* * Outputs: 39 */ 
 var num = 123456; var digits = num.toString().split(''); var realDigits = digits.map(Number) console.log(realDigits); 

Puoi anche farlo in modo “matematico” senza considerare il numero come una stringa:

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

Un lato positivo che posso vedere è che non dovrai eseguire parseInt() su ogni cifra, hai a che fare con le cifre reali come valori numerici.

Test case dal vivo .

Fornirò una variazione su una risposta già data in modo da poter vedere un approccio diverso che conserva il tipo numerico per tutto il tempo:

 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 

Ho usato una tecnica come quella sopra per avere un buon effetto quando si converte un numero in numeri romani, che è uno dei miei modi preferiti per iniziare a imparare un linguaggio di programmazione che non conosco. Per esempio ecco come ho escogitato un modo per convertire numeri in numeri romani con Tcl 10 anni fa: http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/

Le linee comparabili nel mio script Tcl sono:

  while {$arabic} { set digit [expr {$arabic%10}] set arabic [expr {$arabic/10}] 

Questo è il più breve che ho trovato, anche se restituisce le cifre come stringhe:

 let num = 12345; [...num+''] //["1", "2", "3", "4", "5"] 

O usalo per recuperare interi:

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

Puoi lavorare sulle stringhe anziché sui numeri per ottenere ciò. Puoi farlo in questo modo

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

Ciò restituirà una serie di stringhe ['1','1','1'] su cui è ansible eseguire l’iterazione e chiamare il metodo parseInt .

 parseInt('1') === 1 

Se si desidera la sum di singole cifre, è ansible utilizzare la funzione di riduzione (implementata da JavaScript 1.8) come questa

 (111 + '').split('').reduce(function(previousValue, currentValue){ return parseInt(previousValue,10) + parseInt(currentValue,10); }) 
 // 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] 

Separare ogni 2 parametro.

 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 

Shadow Wizard, versione estesa di 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); 

uscita: 1000,500,20,3

Senza convertire in stringa:

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

E il più semplice …. num_string.split('').map(Number)

Prova qui sotto:

 console.log((''+123).split('').map(Number)) 
 var num = 111, separateDigits = num.toString().split(""), i, l = separateDigits.length; for( i = 0; i < l; ++i ) { someObject.someMethod( +separateDigits[i] ); } 

Un approccio funzionale per ottenere cifre da un number sarebbe ottenere una string dal proprio number , dividerla in una array (di caratteri) e mappare ogni elemento in un numero.

Per esempio:

 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] 

Se è anche necessario sumre tutte le cifre, è ansible aggiungere il metodo reduce() al codice precedente:

 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 

In alternativa, con ECMAScript 2015 (6a edizione), è ansible utilizzare le funzioni freccia :

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

Se è necessario sumre tutte le cifre, è ansible aggiungere il metodo reduce() al codice precedente:

 var num = 123456; var result = num.toString() .split('') .map((item, index) => parseInt(item)) .reduce((previousValue, currentValue) => previousValue + currentValue, 0); console.log(result); // returns 21 

Puoi provare questo

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

Spero che questo ha aiutato!

Ho usato questo modo semplice per farlo.

Per dividere le cifre

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

Per aggiungerli insieme

 console.log(arr.reduce( (a,b) => a+b )); // 15 
 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 } }