我有一个函数 sum([1,2,3,4],50,10,[10, 20],1)
,由两个整数组成和数组以及我想返回所有单个元素的总和。在给定的示例中,总和为 101。
问题:我找到了一种有效的方法,但我想知道我可以做些什么来提高它的效率。
我的方法如下:
- 初始化一个新数组;那些数组参数,例如
[1,2,3,4]
,将首先转换为总和,然后推送到新数组中。 - for 循环遍历所有参数
- 检查,参数是否为数组
- 如果是,则将所有元素相加(通过
.reduce()
)并将总和插入新的数组。 - 如果否,则将元素插入新数组
- 如果是,则将所有元素相加(通过
- 将
newArray
转换为 sum (再次通过.reduce()
) 并返回。
代码:
console.log("Result: " + sum([1,2,3,4],50,10,[10, 20],1));
function sum(...allArgs) {
let newArray = [];
// go through all args
allArgs.forEach((elem) => {
// check if argument is an array
if (Array.isArray(elem)){
// arraySum = all Items of array
arraySum = elem.reduce((acc, currV) => acc + currV, 0);
// push arraySum into new Array
return newArray.push(arraySum);
}
// push other arguments (that are not arrays) into new array
newArray.push(elem);
});
// return the sum of the new array
return newArray.reduce((acc, currV) => acc + currV);
}
我找到了comparable post ,区别在于在那篇文章中没有参数是数组,因此这篇文章。
在此过程中我可以改进什么?
最佳答案
您可以将 forEach
替换为 reduce
function sum(...allArgs) {
// go through all args
return allArgs.reduce((sum, elem) => {
// check if argument is an array
if (Array.isArray(elem)){
// arraySum = all Items of array
return sum + elem.reduce((s,i)=>s+i,0);
}else{
return sum + elem;
}
},0);
}
sum([1,2,3],50,10,[10, 20],1)
或嵌套总和
function sum(...allArgs) {
// go through all args
return allArgs.reduce((total, elem) => {
// check if argument is an array
if (Array.isArray(elem)) {
return total + sum(...elem);
} else {
return total + elem;
}
}, 0);
}
sum([1, 2, 3], 50, 10, [10, 20,[11,12]], 1);
关于javascript - 所有参数的总和(有些参数是数组);总和( [1,2,3,4], 50, 10, [10, 20],1 ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930093/