如何在javascript中乘以所有值

时间:2011-11-19 00:53:05

标签: javascript arrays

我有一个包含多个文本框的表单,根据我从数据库中检索的值,文本框的数量会发生变化。我想要做的是将文本字段值的所有值相乘,所以首先我将它们放入一个数组并将它们相乘并将答案发送到文本框。但我似乎无法得到正确的答案。

例如,当我有3个文本框并且我为每个文本框输入1时,我应该得到1x1x1 = 1但是我得到答案为3.当我在每个文本框中输入2时,我应该得到2x2x2 = 8但答案是12

我的代码如下:

Javascript代码:

function sumfrm(form){ 
  var totalOdds = 0;
  var odds = document.getElementsByTagName('input');
  var n;
  var i; //
for (i = 0; i < odds.length; ++i) {
  n = parseFloat(odds.item(i).value, 10);
    if (!isNaN(n)) {
       totalOdds += n*n;
   }
}

6 个答案:

答案 0 :(得分:2)

var totalOdds = 1; //initialize like this
totalOdds = totalOdds * n // do this in your for loop

应该做的伎俩

您目前拥有的1x1x1。

开始时的

totalOdds为0

totalOdds += 1 * 1

是1

第二次再次 totalOdds += 1 * 1

是2

并且在第三次之后 3

答案 1 :(得分:1)

for (i = 0; i < odds.length; ++i) {
    n = parseFloat(odds.item(i).value, 10);
    if (!isNaN(n)) {
        totalOdds *= n;
    }
}

答案 2 :(得分:1)

function sumfrm(form){ 
  var totalOdds = 1; // changed
  var odds = document.getElementsByTagName('input');
  var n;
  var i; //
for (i = 0; i < odds.length; ++i) {
  n = parseFloat(odds.item(i).value, 10);
    if (!isNaN(n)) {
       totalOdds *= n; // changed
   }
}

更改了两行。它现在应该正常工作,兄弟:)

答案 3 :(得分:0)

首先,我建议您进行一些代码清理:

  1. 从函数中删除未使用的form参数。

  2. 减少函数体中局部变量的数量。

    function multiply() {
    
        var inputs = document.getElementsByTagName('input');
    
        var result = parseFloat(inputs.item(0).value, 10) || 0;
        (result == 0) && return 0;
        for (var i = 1; i < inputs.length; ++i) {
            n = parseFloat(inputs.item(i).value, 10);
            (isNaN(n) || n == 0) ? return 0 : result *= n;
        }
    
        return result;
    }
    

答案 4 :(得分:0)

你正在取数字的平方和。相反,这样做:

function sumfrm(form){ 
  var totalOdds = 1;
  var odds = form.getElementsByTagName('input');
  var n, i;
  for(i = 0; i < odds.length; i++) {
    n = parseFloat(odds[i].value);
    if(!isNaN(n)) {
       totalOdds *= n;
    }
  }
}

答案 5 :(得分:0)

做数组乘法最好在java脚本中使用默认函数“reduce”,你可以将所有值都推送到数组然后进行乘法运算 请尝试以下代码。 (这是ES6)

let sum = [1, 1, 1].reduce( (prev, curr) => prev * curr );