Javascript:减少到一个数字

时间:2014-09-24 15:22:01

标签: javascript arrays modulo

所以我需要一个日期并通过将每个数字加起来将其转换为一个单个数字,当总和超过10时,我需要将两个数字加起来。对于下面的代码,我有12/5/2000,即12 + 5 + 2000 = 2017.所以2 + 0 + 1 + 7 = 10& 1 + 0 = 1.我把它归结为一个数字,它在Firebug中工作(输出为1)。但是,它无法在我尝试使用的编码测试环境中工作,因此我怀疑出现了问题。我知道下面的代码是草率的,所以任何想法或帮助重新格式化代码将是有帮助的! (注意:我认为它必须是嵌入在函数中的函数,但尚未能使其工作。)

var array = [];
var total = 0;

    function solution(date) {
      var arrayDate = new Date(date);
      var d = arrayDate.getDate();
      var m = arrayDate.getMonth();
      var y = arrayDate.getFullYear();
      array.push(d,m+1,y);

        for(var i = array.length - 1; i >= 0; i--) {
          total += array[i];
        };
          if(total%9 == 0) {
            return 9;
          } else
            return total%9;    
    };

solution("2000, December 5");

2 个答案:

答案 0 :(得分:1)

您可以使用递归函数调用

function numReduce(numArr){
   //Just outputting to div for demostration
   document.getElementById("log").insertAdjacentHTML("beforeend","Reducing: "+numArr.join(","));
   
   //Using the array's reduce method to add up each number
   var total = numArr.reduce(function(a,b){return (+a)+(+b);});

   //Just outputting to div for demostration
   document.getElementById("log").insertAdjacentHTML("beforeend",": Total: "+total+"<br>");
   
   if(total >= 10){
      //Recursive call to numReduce if needed, 
      //convert the number to a string and then split so 
      //we will have an array of numbers
      return numReduce((""+total).split(""));
   }
   return total;
}
function reduceDate(dateStr){
   var arrayDate = new Date(dateStr);
   var d = arrayDate.getDate();
   var m = arrayDate.getMonth();
   var y = arrayDate.getFullYear();
   return numReduce([d,m+1,y]);
}
alert( reduceDate("2000, December 5") );
<div id="log"></div>

答案 1 :(得分:0)

如果这是您的最终代码,则您的功能不会输出任何内容。试试这个:

var array = [];
var total = 0;

    function solution(date) {
      var arrayDate = new Date(date);
      var d = arrayDate.getDate();
      var m = arrayDate.getMonth();
      var y = arrayDate.getFullYear();
      array.push(d,m+1,y);

        for(var i = array.length - 1; i >= 0; i--) {
          total += array[i];
        };
          if(total%9 == 0) {
            return 9;
          } else
            return total%9;    
    };

alert(solution("2000, December 5"));

它将在对话框中提醒结果。