【问题标题】:javascript total sum of array valuesjavascript数组值的总和
【发布时间】:2015-05-28 18:33:43
【问题描述】:

尝试创建表单以将单位数组中的值相加。无法使函数 Calc_totals 工作。

<script language="JavaScript" type="text/javascript">
function Calc(form) {

    var drink = new Array()
    drink [0] = form.drink0.value;
    drink [1] = form.drink1.value;
    drink [2] = form.drink2.value;

    var units = new Array()
    units [0] = 25;
    units [1] = 50;
    units [2] = 75;

    var number_units = new Array()
    form.units0.value = form.drink0.value * units[0];
    form.units1.value = form.drink1.value * units[1];
    form.units2.value = form.drink2.value * units[2]; 
    } 

function Calc_totals() {
    var answerValue = 0; 
    for(i=0; i < units.length; i++) 
    { 
    answerValue += Number(units[i]);
    } 
    form.total_units.value = answerValue;
}
</script>

我想要函数 Calc_totals 到总单位并输出到 form.total_units.value。

HTML:

<form name="calc_form" id="form" method="post">
   <table width="370" border="0" bgcolor="#EAEAEA">
<tr>
<th width="141"><h2>Drink Type</h2></th><th width="55"><h2>Number drank</h2></th>
<th width="84"><h2>Units</h2></th>
<th width="84"><h2>Calories</h2></th>
</tr>
   <tr class="table-text">
     <td class="right"><p class="table-text">Cider (4.5%)</p>
       <p class="table-text">1 x 568ml pint</p>
       <p class="table-text">e.g. Magners, Strongbow</p></td>
    <td width="55" valign="top">
      <p class="table-text">
     <input name="drink0" type="text" id="drink0" size="3" maxlength="2" onchange="Calc(form);" />
      </p></td>
    <td width="84" valign="top"><p class="table-text">
      <input name="units0" type="text" id="units0" size="4" maxlength="3" />
    </p></td>
    <td width="84" valign="top"><p class="table-text">
      <input name="calories0" type="text" id="calories0" size="4" maxlength="3" />
    </p></td>
    </tr>
<tr>
    <td class="right"><p class="table-text">Cider (7.5%)</p>
      <p class="table-text">1 x 500ml can</p></td>
    <td width="55" valign="top" class="table-text"><p class="table-text">
      <input name="drink1" type="text" id="drink1" size="3" maxlength="2" onchange="Calc(form);" />
    </p></td>
    <td width="84" valign="top"><p class="table-text">
      <input name="units1" type="text" id="units1" size="4" maxlength="3" />
      </span></p></td>
    <td width="84" valign="top"><p class="table-text">
      <input name="calories1" type="text" id="calories1" size="4" maxlength="3" />
      </span></p></td>
    </tr>
<tr>
    <td class="right"><p class="table-text">Beer (5%)</p>
      <p class="table-text">1 x 330ml bottle </p>
      <p class="table-text">e.g. Grolsch, Budweiser</p></td>
    <td width="55" valign="top" class="table-text"><p class="table-text">
      <input name="drink2" type="text" id="drink2" size="3" maxlength="2" onchange="Calc(form);" />
    </p></td>
    <td width="84" valign="top"><p class="table-text">
      <input name="units2" type="text" id="units2" size="4" maxlength="3" />
    </p></td>
    <td width="84" valign="top"><p class="table-text">
      <input name="calories2" type="text" id="calories2" size="4" maxlength="3" />
    </p></td>
    </tr>

<tr>
  <td><p class="table-text">&nbsp;</p></td>
  <td width="55" valign="top"><p class="table-text"></p></td>
  <td width="84" valign="top">&nbsp;</td>
  <td width="84" valign="top"><p class="table-text"></p></td>
</tr>

<tr>
  <td><p class="table-text"><strong>Totals per week= </strong></p></td>
  <td width="55" valign="top"><p class="table-text">&nbsp;</p></td>
  <td width="84" valign="top"><p class="table-text">
    <input name="total_units" type="text" id="total_units" size="4" maxlength="3" /> 
    units  </p></td>
  <td width="84" valign="top"><p class="table-text">
    <input name="total_calories" type="text" id="total" size="4" maxlength="3" />
  kcals</p></td>
</tr> 

<tr>  
<td colspan="2"><INPUT name="reset" value="Reset" TYPE="reset"> </td>
<td colspan="3"><input name="Calculate Total" type="button" id="Calculate Total" value="Calculate Total" onclick="Calc_totals();" /></td>
</tr>
</table>
</form>

我想要单位总数。 感谢您的帮助。

【问题讨论】:

  • 请提供整个代码以及form 的示例输入。
  • 你想得到什么答案...??
  • 你试过谷歌吗?我用谷歌找到了答案。
  • 是的!过去两天……卡住了。
  • 你应该阅读this

标签: javascript arrays function sum


【解决方案1】:

此代码的问题在于 units 在 Calc_totals 中不可见。您有几个选择:

  • 使其全球化(不好的选择)
  • 将其作为参数传递

或者,您可以使用 reduce 计算总和(ECMAScript 5 功能 - 不适用于旧版浏览器)

var sum = units.reduce(function(a, b) { return a + b });

和ES6版本

var sum = units.reduce((a, b) => a + b);

【讨论】:

  • @jmill23 修复它的简单方法是将单元移到函数var units = [];之外
  • units数组中的变量太多,无法使用此功能。尝试了循环但不工作。
【解决方案2】:

在 Calc() 之外定义“单位”。

<script language="JavaScript" type="text/javascript">
var units = new Array();
function Calc() {...}

=-=-=-=-=-=-=-=-=已编辑(添加更多代码=-=-=-=-=-=-=-=-=-=-=-=

<html>
<head>
<script language="JavaScript" type="text/javascript">
var units = new Array();
function Calc() {
    units [0] = 25;
    units [1] = 50;
    units [2] = 75;
}

function Calc_totals() {
    var answerValue = 0; 

    for(i=0; i < units.length; i++) 
    { 
        answerValue += Number(units[i]);
    } 
    alert(answerValue);
}

function foo()
{
    Calc();
    Calc_totals();
}
</script>
</head>
<body>
<a href="#" onclick="return foo();">Test</a>
 </body>
</html>

【讨论】:

  • 如何从上面的函数调用它并通过循环传递它。问题似乎是 Calc_totals 没有从单位中获取值?
  • 我说在 Calc() 之外定义它“Not In Calc()”并使其全局化。删除 Calc() 中的单位定义。 Calc_totals 无法看到该数组,因为它是 Calc() 的本地数组。
  • 错误似乎与 for 循环有关。变量答案值 = 0; for(i=0; i
  • 是的,它没有获得价值单位。正如我之前告诉你的,将单位数组定义为全局变量而不是局部变量。
  • 好的,我现在明白你的意思了,但我不知道该怎么做。你能给出示例代码吗?谢谢。
【解决方案3】:

Try This For After push in Array Of Addition (Sum)

        var globalQtyItemsArray = [];

        var totalQtysAddition = 0;

        globalQtyItemsArray.push(getTrNoQty);

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

          totalQtysAddition += globalQtyItemsArray[i] << 0;  // Addition of Array

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2017-06-04
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多