我正在尝试解决一个数学问题,其中我接收一个数字,例如45
或111
,然后将该数字分解为单独的数字,例如4 5
或1 1 1
。然后,我会将每个数字保存到变量中以运行一个方法。有人知道如何将数字拆分成单个数字吗?
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
对于每个数字,我想要将其数字拆分并将它们相加。
我正在尝试解决一个数学问题,其中我接收一个数字,例如45
或111
,然后将该数字分解为单独的数字,例如4 5
或1 1 1
。然后,我会将每个数字保存到变量中以运行一个方法。有人知道如何将数字拆分成单个数字吗?
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
对于每个数字,我想要将其数字拆分并将它们相加。
var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);
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
*/
console
API — 将 console
改为 alert
。 - Lapple您也可以使用“数学”方法而无需将数字视为字符串:
var num = 278;
var digits = [];
while (num != 0) {
digits.push(num % 10);
num = Math.trunc(num / 10);
}
digits.reverse();
console.log(digits);
我能看到的一个好处是你不必对每个数字运行 parseInt()
,因为你正在处理实际的数字作为数值。
[ -2, -7, -8 ]
作为 -278
看起来是一个有趣的选择。 - StefnotchMath.abs()
来简单地忽略数字为负的情况,但如果你确实想保留这个细节,就需要其他方法。所以归根结底,在这种情况下无法事先知道要求。 - Shadow The GPT Wizard我找到的是最短的代码,尽管它会将数字作为字符串返回:
let num = 12345;
[...num+''] //["1", "2", "3", "4", "5"]
或者使用以下代码将其转换为整数:
[...num+''].map(n=>+n) //[1, 2, 3, 4, 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设计了一个将数字转换为罗马数字的方法:http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/
我的Tcl脚本中相应的行:
while {$arabic} {
set digit [expr {$arabic%10}]
set arabic [expr {$arabic/10}]
output.unshift
(而不是 push
),从而使 reverse()
不必要--很多人会忽略 unshift
。 - Dexygenoutput.unshift
相关的更新,请告知我,我将不胜感激。 - CODE-REaD// 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]
String
、split
和map
:String(number).split("").map(Number);
function splitNum(num) {
return String(num).split("").map(Number);
}
console.log(splitNum(1523)); // [1, 5, 2, 3]
console.log(splitNum(2341)); // [2, 3, 4, 1]
console.log(splitNum(325)); // [3, 2, 5]
(111 + '').split('')
这将返回一个字符串数组 ['1','1','1']
,你可以对其进行迭代并调用 parseInt
方法。
parseInt('1') === 1
(111 + '').split('').reduce(function(previousValue, currentValue){
return parseInt(previousValue,10) + parseInt(currentValue,10);
})
不转换为字符串:
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;
}
const num = 7890;
const digits = [...String(num)].map(Number);
console.log(digits)
或者,使用...
和reduce
来获取数字及其总和。
const sumOfDigits = num => [...""+num].reduce((acc, dig) => acc + +dig, 0);
console.log('Sum of digits: ', sumOfDigits(7890));
var realDigits = digits.map(Number)
,我们就达成协议了。 - Alex Pyzhianov"555".split('').map(Number)
- NVRM1e100.toString().split('');
的结果是[ "1", "e", "+", "1", "0", "0" ]
。 - Stefnotch