JavaScript编号拆分为单个数字

jon*_*tek 55 javascript math

嗨我正在尝试解决数学问题,其中我取一个数字,例如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)

  • 添加`var realDigits = digits.map(Number)`我们有一个交易 (15认同)
  • 它会把它分成一个字符串数组......不好. (2认同)

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)


Gia*_*dei 8

使用String,splitmap:

String(number).split("").map(Number);
Run Code Online (Sandbox Code Playgroud)

String(number).split("").map(Number);
Run Code Online (Sandbox Code Playgroud)


Nar*_*ala 5

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

(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)


le_*_*e_m 5

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