嗨我正在尝试解决数学问题,其中我取一个数字,例如45或111,然后将数字拆分为单独的数字,例如4 5或1 1 1.然后我将每个数字保存到var以运行方法.有没有人没有如何将数字分成单个数字.
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
Run Code Online (Sandbox Code Playgroud)
对于每个数字,我想分割它们的数字并将它们加在一起?
Bri*_*laz 77
var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);
Run Code Online (Sandbox Code Playgroud)
Lap*_*ple 60
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]
*/
Run Code Online (Sandbox Code Playgroud)
更新:计算总和
for (var i = 0, sum = 0; i < output.length; sum += output[i++]);
console.log(sum);
/*
* Outputs: 39
*/
Run Code Online (Sandbox Code Playgroud)
Sha*_*ard 26
您也可以使用"数学"方式执行此操作,而不将数字视为字符串:
var num = 278;
var digits = [];
while (num > 0) {
digits.push(num % 10);
num = parseInt(num / 10);
}
digits.reverse();
console.log(digits);
Run Code Online (Sandbox Code Playgroud)
我可以看到的一个好处是你不必parseInt()
在每个数字上运行,你将实际数字作为数值处理.
Mar*_*ari 15
这是我发现的最短,但它确实将数字作为字符串返回:
let num = 12345;
[...num+''] //["1", "2", "3", "4", "5"]
Run Code Online (Sandbox Code Playgroud)
或者用它来取回整数:
[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
Geo*_*pty 10
我将提供已经给出的答案的变体,以便您可以看到一直保留数字类型的不同方法:
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
Run Code Online (Sandbox Code Playgroud)
在将数字转换为罗马数字时,我使用了上述技术,效果很好,这是我开始学习一种我不熟悉的编程语言的最喜欢的方法之一.例如,这里是我如何设计一种方法,用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}]
Run Code Online (Sandbox Code Playgroud)
使用String
,split
和map
:
String(number).split("").map(Number);
Run Code Online (Sandbox Code Playgroud)
String(number).split("").map(Number);
Run Code Online (Sandbox Code Playgroud)
您可以使用字符串而不是数字来实现此目的。你可以这样做
(111 + '').split('')
Run Code Online (Sandbox Code Playgroud)
这将返回一个字符串数组['1','1','1']
,您可以在其上迭代并调用parseInt
方法。
parseInt('1') === 1
Run Code Online (Sandbox Code Playgroud)
如果你想要各个数字的总和,你可以使用reduce函数(从Javascript 1.8实现),如下所示
(111 + '').split('').reduce(function(previousValue, currentValue){
return parseInt(previousValue,10) + parseInt(currentValue,10);
})
Run Code Online (Sandbox Code Playgroud)
// 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]
Run Code Online (Sandbox Code Playgroud)