【问题标题】:How to multiply all items in array inside a loop with JavaScript [duplicate]如何使用JavaScript将循环内数组中的所有项目相乘[重复]
【发布时间】:2019-12-03 01:06:43
【问题描述】:

我在函数 (JavaScript) 中有项目 0 到 N 的动态输入。

在每个位置都有类似items[1,3,4]的值,创建一个循环:

更新:项目或“数组”是动态的,我没有永久值。

例如:for (var i = 0;i < items.length; i++){}

需要返回所有项目的乘积,只知道“for”内的数组(items.length)的总和。

所以.. 第一。需要累积

第二个可能在循环中相乘item[value] * item[value] *

第三个可能是if(i == items.length){return total}(例如:1*3*4 = 12)

不知道怎么累积 var total = item[value] * item[value] * ...

function **multiplyEach**(item){
  item[1,3,4]; //only ex.:this array have many possibilities of length
  for( var i = 0; i <= item.length; i++){
    var **items** = item[i] * item[i]; 
    if (i == item.length){
      return items;
    }
  }
}

项目在 Chrome 浏览器的调试中具有 NaN 或未定义的值。 :/ ..

【问题讨论】:

标签: javascript arrays cumulative-sum


【解决方案1】:

这是Array.prototype.reduce 的一个很好的用例

const product = [1, 3, 4].reduce((product, n) => product * n, 1);

console.log(product);

【讨论】:

  • 但是我有一个动态数组,在这种情况下如何实现..
  • 这只是一个示例,说明人们将如何实现这样的东西 - 它并不是直接复制并粘贴到您的代码中。您认为应该如何修改此代码以处理“动态”数组?也许创建一个变量来引用数组,然后在该数组上reduce,对吧?
【解决方案2】:

我想这就是你想要的......

var items = [1,3,4]; //only ex.:this array have many possibilities of length

var product = 1;
for( var i = 0; i < items.length; i++){
  product *= items[i]; 
}

// product === 12

【讨论】:

  • 为什么循环里面有一个var?
  • 我进行了修改以修复它,有几处错误。
【解决方案3】:

正如@epascarello 建议的那样,您可以使用Array.reduce() 函数来实现:

const multiplyEach = nums => nums.reduce((res, num) => res * num, nums.length ? 1 : 0);

console.log('multiplyEach([1,3,4]) = ', multiplyEach([1,3,4]));
console.log('multiplyEach([]) = ', multiplyEach([]));

【讨论】:

    【解决方案4】:

    在 Javascript 中有一个数组reduce 函数的示例可供您使用。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

    【讨论】:

      【解决方案5】:

      正如其他人建议的那样,使用 Array.prototype.reduce 方法。可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce找到文档

      // This is an example for your use case.
      const arr = [1,3,4];
      let total = arr.reduce((a, b) => a * b);
      console.log(total); // 12

      【讨论】:

        【解决方案6】:

        1 的初始值启动产品。将其存储在单独的变量中。将每个项目与它相乘。在循环之后执行return,而不是在循环内有条件地执行。不要让你的循环运行到item.length,而是item.length-1,这是最后一个索引。

        function multiplyEach(items) {
            var product = 1;
            for (var i = 0; i < items.length; i++) {
                product = product * items[i];
            }
            return product;
        }
        console.log(multiplyEach([1,3,4]));
        

        【讨论】:

          【解决方案7】:

          通常,当您执行此类操作时,您在 for 循环之外有一些变量,用于跟踪您当前的“累积”值。然后,对于数组中的每个项目,更新您的变量。这是一个简单的例子:

          function multiplyEach(items){
              // variable we will use to keep track of the current value
              var acc = 1;
              // now loop through the items
              for( var i = 0; i < items.length; i++ ){
                  // now we update our variable
                  acc = acc * items[i]; 
              }
              // now return our value
              return acc;
          }
          

          还有一点需要注意,在您的示例中,您有:

          for( var i = 0; i &lt;= item.length; i++)

          这将引发错误,因为您迭代的时间太长了。你有“

          【讨论】:

          • 是的.. 谢谢.. "
          • 我更新问题 - 因为有一个动态数组 ("
          猜你喜欢
          • 2018-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-01
          • 2014-12-14
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          相关资源
          最近更新 更多