[英]Multiply all elements in array
我在这里找不到我真正想要的例子。 我想将所有数组元素相乘,因此如果数组包含 [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]);
谁能解释一下,我在这里错过了什么?
原因已经知道。 这是另一种选择 - 为您的方法使用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`); }
使用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
您没有将 multiply 作为函数调用:
multiply([1,2,3]);
这是对数组进行任何算术运算的最简单方法
myMathArray = [1,2,3,4,5] let myValue = myMathArray.reduce((a,b)=> a*b) console.log(myValue)
如果您想将一些连续的数字相乘,例如 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
reduce() 方法为数组的每个值执行提供的函数,并将数组缩减为单个值
const arr = [1,2,3]; const sum = arr.reduce((prevValue,curValue) => { return prevValue * curValue },1); console.log(sum);
prevValue是初始值,在这个例子中它等于1
curValue是数组中当前元素的值
这可以使用递归来简化......
function productOfArray(arr) {
let sum = 1;
function sumHelper(nums) {
if(nums.length === 0)
return 0;
sum = sum * nums[nums.length-1];
nums.length--;
sumHelper(nums);
}
sumHelper(arr);
return sum;
}
console.log(productOfArray([1,2,3]));
如果你想使用递归
const productOfArray = (arr) => { if (arr.length === 0) { return 1; } return arr[0] * productOfArray(arr.slice(1)); } console.log(productOfArray([1,2,3,10])); // 60
将所有元素数组相乘,使用以下示例:
常量 arr=[1,2,3,2]
使用减少();
const multiply=arr.reduce((preValue,nextValue)=>preValue *nextValue )
console.log(乘)//12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.