JavaScript数字分成单独的数字

嗨,我想解决一个math问题,我拿一个数字,例如45或111,然后将数字分成不同的数字,例如4 5或1 1 1.然后我将每个数字保存到一个变种运行一个方法。 有没有人没有如何将一个数字分成个人数字。

例如,我有一个在数组上运行的循环:

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

对于每个号码,我想分裂它的数字,并将它们加在一起?

 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 */ 
 var num = 123456; var digits = num.toString().split(''); console.log(digits); 

你也可以用“math”的方式来做,而不用把数字看作一个string:

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

我可以看到的一个好处是,你不必在每个数字上运行parseInt() ,你将实际的数字作为数值处理。

现场testing案例 。

我会提供一个已经给出的答案的变体,所以你可以看到一个不同的方法,一直保留数字types:

 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 

在将数字转换为罗马数字时,我使用了上述方法,效果很好,这是我最喜欢的一种学习我不熟悉的编程语言的方法之一。 例如,这里是我如何devise一种方法来将数字转换为10年前的Tcl与罗马数字: http : //code.activestate.com/recipes/68379-conversion-to-roman-numerals/

我的Tcl脚本中的可比线条是:

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

您可以使用string而不是数字来实现此目的。 你可以这样做

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

这将返回一个string['1','1','1']的数组,你可以迭代并调用parseInt方法。

 parseInt('1') === 1 

如果你想要个人数字的总和,你可以像这样使用reduce函数(从Javascript 1.8实现)

 (111 + '').split('').reduce(function(previousValue, currentValue){ return parseInt(previousValue,10) + parseInt(currentValue,10); }) 

分开每个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 

Shadow Wizard,由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

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

为了从一个number获得数字,一个函数式的方法是从你的number得到一个string ,将它分解成一个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版),您可以使用箭头function :

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

你可以试试这个

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

希望这有助于!

我用这个简单的方法来做到这一点。

分割数字

 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