在JS

时间:2017-09-02 03:15:12

标签: javascript

我正在创建一个函数,它将函数中提供的所有数字相加。因此,如果输入为1148 = 1 + 1 + 4 + 8 = 14

但是,如果数字为负数,我会被卡住,应将第一个数字视为负数。例如。 -316 = -3 + 1 + 6 = 4

我所做的是我尝试拆分并将数字转换为字符串和数字再次添加它们。但是,出于某种原因,这不会增加负数,而是会返回NaN。



function addNumbers(num) {
  var strNum = num.toString();
  strNum = strNum.split('');
  
  var total = 0;
  for(var i = 0; i < strNum.length; i++){
    total += parseInt(strNum[i]);
  }
 
  return total;
  

}

var output = addNumbers(1148);
console.log(output); // --> 14

var output2 = addNumbers(-316);
console.log(output2); // --> should return 4 instead returned NaN
&#13;
&#13;
&#13;

有没有办法可以解决这个问题并采取一些消极措施来补充它们?

6 个答案:

答案 0 :(得分:1)

&#13;
&#13;
MAX
&#13;
&#13;
&#13;

答案 1 :(得分:1)

你正在添加char&#39; - &#39;有数字,所以你得到NaN。在第二种情况下,数组strNum包含&#39; - &#39;作为第一个元素,您将其添加到数字。你可以这样做:

&#13;
&#13;
function addNumbers(num) {
  var strNum = num.toString();
  strNum = strNum.substr(strNum.indexOf('-')+1).split(''); //split the string after the indexof '-'.

  var total = num < 0 ? -strNum[0] : +strNum[0]; //initialize total as positive of first char or negative by checking num<0.
  for(var i = 1; i < strNum.length; i++){ //start iteration from second element in array.
     total += parseInt(strNum[i]);
  }

  return total;


}

var output = addNumbers(1148);
console.log(output); // --> 14

var output2 = addNumbers(-316);
console.log(output2); // --> should return 4 instead returned NaN
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我的评论令人困惑,所以这里有一些实际的代码:)

这个想法是正在为一个数字解析负号,它返回NaN。

function addNumbers(num) {
  // remove negative sign so it doesn't get parsed by itself
  var numStr = num.toString().split('').replace("-","");

  // add negative sign back if needed 
  if (num  < 0) numStr[0] = "-" + numStr[0];

// rest of function
}

希望这有帮助!

答案 3 :(得分:0)

function addNumbers(num) {
  var x = [],
    sum = 0;
  if (num < 0) {
    x = num.toString().split('');
    x[0] = -0;
    x[1] = x[1] * (-1);
    sum = x.reduce(function(a, b) {
      return +a + +b;
    })
  } else {
    x = num.toString().split('');
    sum = x.reduce(function(a, b) {
      return +a + +b;
    })
  }
  return sum
}
var output = addNumbers(1148);
console.log(output); // --> 14

var output2 = addNumbers(-316);
console.log(output2);

答案 4 :(得分:0)

对于已经提到的解决方案的更简单的替代方法,您可以使用String#match代替split以及正则表达式来捕获负整数和正整数:/(-?\d)/g。当输入为["-3", "1", "6"]时,这将返回一个类似-316的数组。 其余代码中的任何内容都不需要更改。

function addNumbers(num) {
  var strNum = num.toString();
  strNum = strNum.match(/(-?\d)/g);
  
  var total = 0;
  for(var i = 0; i < strNum.length; i++){
    total += parseInt(strNum[i]);
  }
  return total;
}

var output = addNumbers(1148);
console.log(output); // --> 14

var output2 = addNumbers(-316);
console.log(output2); // --> should return 4 instead returned NaN

答案 5 :(得分:0)

<html>
<head>
    <title>TODO supply a title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        function addNumbers(num) {
            num = num.split('');
            var posVal = 0;
            var negVal = 0;
            for(i = 0; i < num.length; i++){
                if (num[i] === "-") 
                { 
                    negVal = negVal + parseInt(num[i+1]);                        
                    i=i+1;                        
                } 
                else 
                { posVal = posVal + parseInt(num[i]);   }                   

              }
                var total =0 ;
                if (posVal >= negVal) 
                {     total = posVal - negVal;  }            
                else 
                {
                    total = negVal - posVal; 
                    total = '-' + total;
                }
                document.getElementById("negVal").innerHTML = negVal;
                document.getElementById("posVal").innerHTML = posVal;
                document.getElementById("total").innerHTML = total;
            }

    </script>

</head>

<body>
    Text
    <div>TODO write content</div>
    <p id="posVal">positive </p>
    <p id="negVal">negative</p>
    <p id="total">Total</p>
    <button type="button" onclick="addNumbers('-316')">Try it</button>
</body>