如何在JavaScript中将所有值相乘

4
我有一个包含多个文本框的表单,文本框的数量随着我从数据库中检索到的值而改变。我想要做的是将所有文本框的值相乘,所以我先把它们放进一个数组里,然后相乘,将答案发送到一个文本框。但是我似乎得不到正确的答案。
例如,当我有三个文本框并且每个文本框中都输入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;
   }
}

totalOdds += nn; 的作用是将 nn 的结果加到 totalOdds 中。(您可能需要类似于 totalOdds = totalOdds * n 的操作) - ajax333221
6个回答

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

以下翻译为您提供1x1x1的技术解决方案:

在开始时,totalOdds的值为0。

之后执行以下操作:totalOdds += 1 * 1

第一次操作后,totalOdds的值为1。

第二次操作后,totalOdds的值为2。

第三次操作后,totalOdds的值为3

以上就是解决方案,希望对您有所帮助。


这段代码之所以有效而你的原始代码无效,是因为在for循环中,你将totalOdds与n*n(n的平方)相加。相反,你应该从1开始,将其乘以输入框1,然后依次将结果乘以每个输入框。totalOdds *= n是另一种实现方式。 - Nathan Garabedian
@LondonBoy...很高兴能帮到你。如果它解决了你的问题,请接受它作为答案。 - parapura rajkumar

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

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
   }
}

修改了两行代码,现在应该可以正常工作了,兄弟 :)


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;
    }
    

0
你正在计算数字平方的总和。相反,做这个:
function sumfrm(form){ 
  <b>var totalOdds = 1;</b>
  <b>var odds = form.getElementsByTagName('input');</b>
  var n, i;
  for(i = 0; i < odds.length; i++) {
    n = parseFloat(odds[i].value);
    if(!isNaN(n)) {
       <b>totalOdds *= n</b>;
    }
  }
}

0

如果要进行数组乘法,最好使用 JavaScript 中的默认函数“reduce”,您可以将所有值推送到一个数组中,然后进行乘法运算。请尝试以下代码。(它是 ES6)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接