37

我在这里找不到我真正想要的例子。我想将所有数组元素相乘,因此如果数组包含 [1,2,3] ,则总和将为 1*2*3=6; 到目前为止,我已经得到了这段代码,但它返回未定义。

function multiply (array) {
    var sum=1;
    for (var i=0; i<array.length; i++) {
        sum = sum * array[i];
    } 
    return sum;
}
console.log(multiply[1,2,3]);

谁能解释一下,我在这里缺少什么?提前致谢!

4

7 回答 7

66

原因已经知道。这是另一种选择 -Array.reduce用于您的方法:

console.log( [1, 2, 3].reduce( (a, b) => a * b ) );
console.log( Array.from( {length: 20} )
  .map( (v, i) => i + 1 )
  .reduce( (a,b) => a * b )
  .toLocaleString());

// for empty arrays, use some initial value
const arr = [];
if (arr.reduce( (a, b) => a * b, -1 ) === -1) {
  console.error(`The given array ${arr} is empty`);
}

也可以看看

于 2013-10-04T06:56:50.517 回答
9

()调用函数时需要有。

喜欢multiply([1,2,3])

演示在这里

于 2013-10-04T06:53:17.283 回答
9

另一种使用方式Array.reduce应该将初始值设置为 1 ,否则无论如何我们的函数都将返回 0。

[1, 2, 3].reduce((a, b)=> a*b, 1)

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

于 2020-06-09T19:11:33.027 回答
2

您没有将 multiply 作为函数调用:

multiply([1,2,3]);
于 2013-10-04T06:54:03.980 回答
1

如果您想将一些连续的数字相乘,例如 1,2,3,然后应用此代码并在控制台中输入数字 (arr)

let array = [];

function factorisation(arr) {
    for (let j = arr; j > 0; j--) {
        array.push(j);
    }
    return multiply();
}

function multiply() {
    var sum = 1;
    for (var i = 0; i < array.length; i++) {
        sum = sum * array[i];
    }
    return sum;
}

console.log(factorisation(5));
//5*4*3*2*1 = 120
于 2019-05-05T14:46:23.250 回答
1

reduce() 方法为数组的每个值执行提供的函数,并将数组缩减为单个值

    const arr = [1,2,3];
    const sum = arr.reduce((prevValue,curValue) => {
        return prevValue * curValue
    },1);
    console.log(sum);

prevValue是初始值,在这个例子中它等于1

curValue是数组中当前元素的值

于 2020-11-03T15:21:24.007 回答
1

使用Lodash >=4.7:

_.reduce(array, _.multiply)

或者,使用所有三个参数:

_.reduce(array, _.multiply, 1)
于 2020-10-01T15:18:15.167 回答