JavaScript 数字拆分为单个数字

IT技术 javascript math
2021-01-29 19:37:44

我正在尝试解决一个数学问题,其中我取一个数字,例如45, or111然后将数字拆分为单独的数字,例如4 51 1 1然后我会将每个数字保存到一个 var 中以运行一个方法。有谁知道如何将数字拆分为单独的数字?

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

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

对于每个数字,我想拆分其数字并将它们加在一起?

6个回答

var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);

"555".split('').map(Number)
2021-03-22 19:37:44
添加var realDigits = digits.map(Number),我们有交易
2021-03-27 19:37:44
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
 */
@jonnyhitek,对我来说工作得很快——i.imgur.com/TTGZL.png——Chrome 14 @ Win7。还有一个 jsfiddle:jsfiddle.net/Lapple/ZmS3B
2021-03-13 19:37:44
2021-03-20 19:37:44
可能您的浏览器不支持该consoleAPI — 更改consolealert.
2021-03-23 19:37:44
不,我认为这是我的错误,我试图在我的循环中运行您的代码 -
2021-04-02 19:37:44
然后将所有数字动态添加在一起会有多容易,我的数字可能是任何长度?
2021-04-07 19:37:44

您也可以以“数学”方式进行操作,而无需将数字视为字符串:

var num = 278;
var digits = [];
while (num > 0) {
    digits.push(num % 10);
    num = Math.trunc(num / 10);
}
digits.reverse();
console.log(digits);

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

这是我发现的最短的,尽管它确实将数字作为字符串返回:

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}]
@GeorgeJempty,感谢您强调保留数字类型昨天我花了太多时间来解决由字符串输入引起的基本转换问题。我将不胜感激对此答案的任何更新,您可能与 ES5/ES6 和/或output.unshift.
2021-03-20 19:37:44
令人遗憾的是,第一次正确使用 % 运算符在答案列表中如此之低
2021-04-02 19:37:44
感谢您的持续投票,但鉴于 ES5 和/或 ES6,这个答案几乎不再有效。即使目前我应该指定output.unshift(而不是push)从而使reverse()不必要的 - 很多人未能做到unshift
2021-04-05 19:37:44