【问题标题】:How to split a number into its digits in Javascript?如何在Javascript中将数字拆分为数字?
【发布时间】:2015-05-04 08:38:21
【问题描述】:

我想将一个数字拆分成它的数字(例如 4563 到 4 , 5 , 6 , 3 )然后上瘾这个数字。 (例如:4+5+6+3=18)

我可以分别为 3 位或 2 位和...数字编写代码,但我不能为每个数字编写一个全局代码。

所以这是我的 2 位数字代码:

var a = 23
var b = Math.floor(a/10); // 2
var c = a-b*10; // 3
var total = b+c; // 2+3
console.log(total); // 5

这是我的 3 位数代码:

var a = 456
var b = Math.floor(a/100); // 4
var c = a-b*100; // 56
var d = Math.floor(c/10); // 5
var e = c-d*10; // 6
var total = b+d+e; // 4+5+6
console.log(total); // 15

但我无法编写代码来处理每个数字。如何为每个数字编写全局代码?

【问题讨论】:

标签: javascript


【解决方案1】:

在现代浏览器中,您可以执行数组操作,例如

var num = 4563;
var sum = ('' + num).split('').reduce(function (sum, val) {
    return sum + +val
}, 0)

演示:Fiddle

首先创建一个数组digits,然后使用reduce对数组中的值求和

【讨论】:

    【解决方案2】:

    var num = 4563;
    var sum = 0;
    while(num > 0) {
      sum += num % 10;
      num = Math.floor(num / 10);
    }
    console.log(sum);

    【讨论】:

      【解决方案3】:

      先做number%10(模数),然后再做number/10(除),直到数不为0

      【讨论】:

      • 类似这样的东西 var x= 3456;变量总和=0; while(x>0) { var a = x%10;总和=总和+一个; x=x/10; }
      【解决方案4】:

      希望下面的例子对你有用:

      var text="12345";
      var total=0;
      for (i=0;i<text.length;i++)
      {
        total+= parseInt(text[i]);
      }    
      alert(total);
      

      【讨论】:

        【解决方案5】:

        此方案将数字转换为字符串,将其拆分为字符并在回调函数中处理(prev 是上一次调用的结果,current 是当前元素):

        var a = 456;
        var sum = a.toString().split("").reduce(function(prev, current){
            return parseInt(prev) + parseInt(current)
        })
        

        【讨论】:

          【解决方案6】:

          这是我解决问题的方法。我使用的技巧是拆分空字符串以将字符串转换为数组,然后在数组上使用reduce

          function digitSum(n) {
              // changes the number to a string and splits it into an array
              return n.toString().split('').reduce(function(result, b){
                  return result + parseInt(b);
              }, 0);
          }
          

          正如其他几位发帖者所提到的(向我的评论者致敬),这个问题还有其他几个很好的答案。

          【讨论】:

          【解决方案7】:

          这是我使用 ES6 箭头函数作为回调的解决方案。 - 将数字转换为字符串。 - 将字符串拆分为数组。 - 在该数组上调用 map 方法。 - 回调函数将每个数字解析为一个数组。

          let number = 65535;
          
          //USING MAP TO RETURN AN ARRAY TO DIGITS
          let digits = number.toString()
                              .split("")
                              .map(num => parseInt(num));
          //OUTPUT TO DOM
          digits.forEach(
            digit => 
            document.querySelector("#out").innerHTML += digit + "<br>"
          );
          &lt;p id="out"&gt;&lt;/p&gt;

          【讨论】:

            【解决方案8】:

            1) 您可以使用 .toString() 方法将输入数字转换为字符串,并使用扩展 (...) 运算符将其扩展为数组

            const splitNumber = n => [ ...n.toString() ]
            

            2) 另一种捷径 - 使用基于递归的解决方案,例如:

            const splitNumber = n => n ? [ ...splitNumber(n/10|0), n%10 ] : []
            

            【讨论】:

            • 带解释的代码很漂亮,有助于理解概念。
            猜你喜欢
            • 2013-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-14
            • 1970-01-01
            相关资源
            最近更新 更多