我正在创建一个函数,它将函数中提供的所有数字相加。因此,如果输入为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;
有没有办法可以解决这个问题并采取一些消极措施来补充它们?
答案 0 :(得分:1)
MAX
&#13;
答案 1 :(得分:1)
你正在添加char&#39; - &#39;有数字,所以你得到NaN。在第二种情况下,数组strNum包含&#39; - &#39;作为第一个元素,您将其添加到数字。你可以这样做:
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;
答案 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>