JavaScript数组问题将值转换为NaN结果

问题描述 投票:2回答:3

所以我制作这些代码主要是为了好玩。基本上,它允许用户输入数组中的前四个值以及将数组中的所有值乘以给定数字的数字。完成此操作后,程序调用另一个函数来计算奇数数组中的中间数,或者找到偶数数组中两个中间数的平均值,并将该值返回给用户。它应该在数组乘以之前对数组执行此操作,并且在数组乘以用户的数字之后执行此操作。当代码在数组中使用奇数时,代码在原始数组和修改后的数组上使用时运行正常。然而,当修改后的数组是偶数时,它会遇到麻烦。出于某种原因,它不是返回两个中间数的平均值,而是给出NaN的值。这只发生在修改后的数组上,我想知道为什么会这样?这是我的代码的两个副本。第一个在数组中有一个奇数,第二个有一个偶数。任何帮助,将不胜感激。谢谢!

<!DOCTYPE HTML>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>Add Middle Array</title>

<script type="text/javascript">

function collectdata() {

var list = [0, 0, 0, 0, 5];

list[0] = parseFloat(document.getElementById("pokemon").value);
list[1] = parseFloat(document.getElementById("digimon").value);
list[2] = parseFloat(document.getElementById("transformers").value);
list[3] = parseFloat(document.getElementById("workers").value);

var multiply = parseFloat(document.getElementById("multi").value);

var outcome = multiplier(list, multiply);

var spaceoutcome = outcome;

for (i = 0; i < outcome.length; i++) {

spaceoutcome[i] = " " + spaceoutcome[i];
}

document.getElementById("output1").innerHTML = spaceoutcome;

var sumofmiddle = sum(list);

document.getElementById("output2").innerHTML = sumofmiddle;

var sumofmodmid = sum(outcome);


document.getElementById("output3").innerHTML = sumofmodmid;

}

function multiplier(L, M) {

var money = [];

for (i = 0; i < L.length; i++) {

money[i] = (L[i] * M);
}

return money;

}

function sum(L){
var outcome = 0;
if (L.length % 2 == 0) 
{
outcome = ((L[L.length / 2] + L[((L.length / 2) - 1)]) / 2);
}
else
{
outcome = L[((L.length - 1) / 2)];
}

return outcome;

}

</script>
</head>

<body>

Please enter in a list of four values to be muliplied with the final value always being 5. <br>

<input type="text" id="pokemon"><br>
<input type="text" id="digimon"><br>
<input type="text" id="transformers"><br>
<input type="text" id="workers"><br><br>

Please enter the multiplier.<br><br>

<input type="text" id="multi"><br><br>

<button type="button" onclick="collectdata()">Click here to multiply values</button>

<div id="output1"></div><br><br>

Bonus! Here is the average of the middle numbers of the arrays!<br>

<div id="output2"></div><br><br>

Final Surprise! Here is the average of the multiplied modified numbers!<br>

<div id="output3"></div>

</body>
</html>

这是偶数编号的阵列发生故障。

<!DOCTYPE HTML>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>Add Middle Array</title>

<script type="text/javascript">

function collectdata() {

var list = [0, 0, 0, 0, 5, 6];

list[0] = parseFloat(document.getElementById("pokemon").value);
list[1] = parseFloat(document.getElementById("digimon").value);
list[2] = parseFloat(document.getElementById("transformers").value);
list[3] = parseFloat(document.getElementById("workers").value);

var multiply = parseFloat(document.getElementById("multi").value);

var outcome = multiplier(list, multiply);

var spaceoutcome = outcome;

for (i = 0; i < outcome.length; i++) {

spaceoutcome[i] = " " + spaceoutcome[i];
}

document.getElementById("output1").innerHTML = spaceoutcome;

var sumofmiddle = sum(list);

document.getElementById("output2").innerHTML = sumofmiddle;

var sumofmodmid = sum(outcome);


document.getElementById("output3").innerHTML = sumofmodmid;

}

function multiplier(L, M) {

var money = [];

for (i = 0; i < L.length; i++) {

money[i] = (L[i] * M);
}

return money;

}

function sum(L){
var outcome = 0;
if (L.length % 2 == 0) 
{
outcome = ((L[L.length / 2] + L[((L.length / 2) - 1)]) / 2);
}
else
{
outcome = L[((L.length - 1) / 2)];
}

return outcome;

}

</script>
</head>

<body>

Please enter in a list of four values to be muliplied with the final value always being 5. <br>

<input type="text" id="pokemon"><br>
<input type="text" id="digimon"><br>
<input type="text" id="transformers"><br>
<input type="text" id="workers"><br><br>

Please enter the multiplier.<br><br>

<input type="text" id="multi"><br><br>

<button type="button" onclick="collectdata()">Click here to multiply values</button>

<div id="output1"></div><br><br>

Bonus! Here is the average of the middle numbers of the arrays!<br>

<div id="output2"></div><br><br>

Final Surprise! Here is the average of the multiplied modified numbers!<br>

<div id="output3"></div>

</body>
</html>
javascript
3个回答
1
投票

你的sum()函数目前正在评估字符串而不是数字。根据您期望的输入将它们转换为整数或浮点数。我用下面的parseInt()

function sum(L){
 var outcome = 0;
 if (L.length % 2 == 0) {
    console.log(L.length/2)
    var a = L[L.length / 2];
    var b = L[((L.length / 2) - 1)];
    outcome = ( ( parseInt(a) + parseInt(b) ) / 2 );
 } else {
    ...
 }
 return outcome;
}

1
投票

您需要使用var spaceoutcome = outcome.slice();,因为当您向spaceoutcome原始outcome数组添加空格时将被修改。在索引中也使用Math.floor()

这是代码

<!DOCTYPE HTML>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>Add Middle Array</title>

<script type="text/javascript">

function collectdata() {

var list = [0, 0, 0, 0, 5, 6];

list[0] = parseFloat(document.getElementById("pokemon").value);
list[1] = parseFloat(document.getElementById("digimon").value);
list[2] = parseFloat(document.getElementById("transformers").value);
list[3] = parseFloat(document.getElementById("workers").value);

var multiply = parseFloat(document.getElementById("multi").value);

var outcome = multiplier(list, multiply);

var spaceoutcome = outcome.slice();

for (i = 0; i < outcome.length; i++) {

spaceoutcome[i] = " " + spaceoutcome[i];
}

document.getElementById("output1").innerHTML = spaceoutcome;

var sumofmiddle = sum(list);

document.getElementById("output2").innerHTML = sumofmiddle;

var sumofmodmid = sum(outcome);


document.getElementById("output3").innerHTML = sumofmodmid;

}

function multiplier(L, M) {

var money = [];

for (i = 0; i < L.length; i++) {

money[i] = (L[i] * M);
}

return money;

}

function sum(L){
var outcome = 0;
if (L.length % 2 == 0) 
{
outcome = (Math.floor(L[L.length / 2] + L[Math.floor((L.length / 2) - 1)]) / 2);
}
else
{
outcome = L[Math.floor((L.length - 1) / 2)];
}

return outcome;

}

</script>
</head>

<body>

Please enter in a list of four values to be muliplied with the final value always being 5. <br>

<input type="text" id="pokemon"><br>
<input type="text" id="digimon"><br>
<input type="text" id="transformers"><br>
<input type="text" id="workers"><br><br>

Please enter the multiplier.<br><br>

<input type="text" id="multi"><br><br>

<button type="button" onclick="collectdata()">Click here to multiply values</button>

<div id="output1"></div><br><br>

Bonus! Here is the average of the middle numbers of the arrays!<br>

<div id="output2"></div><br><br>

Final Surprise! Here is the average of the multiplied modified numbers!<br>

<div id="output3"></div>

</body>
</html>

1
投票

你有一些语法错误。另外,你不能写这个:

var someArray = []

然后这样做:

someArray[1] = 'wrong';

您必须使用.push()方法填充常规数组。

使用此功能并尝试底部的代码段:

function collectdata() 
{
  var list = [0, 0, 0, 0];

  list[0] = parseFloat(document.getElementById("pokemon").value);
  list[1] = parseFloat(document.getElementById("digimon").value);
  list[2] = parseFloat(document.getElementById("transformers").value);
  list[3] = parseFloat(document.getElementById("workers").value);

  var multiply = parseFloat(document.getElementById("multi").value);
  var outcome = multiplier(list, multiply);
  var spaceoutcome = outcome;

  for (i = 0; i < outcome.length; i++) spaceoutcome[i] = " " + spaceoutcome[i];

  document.getElementById("output1").innerHTML = spaceoutcome;

  var sumofmiddle = sum(list);
  document.getElementById("output2").innerHTML = sumofmiddle;

  var sumofmodmid = sum(outcome);
  document.getElementById("output3").innerHTML = sumofmodmid;

}

function multiplier(L, M)
{
  var money = [];
  
  for (i = 0; i < L.length; i++) money.push(parseFloat(L[i] * M));
  return money;
}

function sum(L)
{
  if (L.length % 2 == 0) return (parseFloat(L[L.length/2]) + parseFloat(L[L.length/2 -1]))/2;
  else return L[(L.length+1)/2 - 1];
}
<!DOCTYPE HTML>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>Add Middle Array</title>
</head>

<body>
Please enter in a list of four values to be muliplied with the final value always being 5.
<br/>

<input type="text" id="pokemon"><br>
<input type="text" id="digimon"><br>
<input type="text" id="transformers"><br>
<input type="text" id="workers"><br><br>

Please enter the multiplier.
<br><br>
<input type="text" id="multi">
<br><br>

<button type="button" onclick="collectdata()">Click here to multiply values</button>

<div id="output1"></div>
<br><br>

Bonus! Here is the average of the middle numbers of the arrays!<br>

<div id="output2"></div>
<br><br>

Final Surprise! Here is the average of the multiplied modified numbers!<br>

<div id="output3"></div>

</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.