我有一个将数组作为输入的函数。
如何修改它以使用变量参数和数组。
例如,我希望arrSum(1,2,3) === arrSum([1,2,3])
返回true
,即两者都应返回6
const arrSum = arr => arr.reduce((a,b) => a+b,0)
console.log(arrSum([1,2,3]))
答案 0 :(得分:10)
您可以将spread syntax
与concat
一起使用。在第一种情况下,你将获得内部另一个数组的数组,在第二种情况下只是一个参数数组但是[].concat(...arr)
你将把它转换为两种情况的参数数组。
const arrSum = (...arr) => [].concat(...arr).reduce((a, b) => a + b, 0)
console.log(arrSum([1, 2, 3]))
console.log(arrSum(1, 2, 3))
console.log(arrSum([1, 2, 3], [4], 5))

答案 1 :(得分:1)
你可以通过多种方式解决这个问题,如果你使用箭头功能就像这样使用休息算子
const arrSum = (...arr) => {
// if we have just on param which is array
if (arr.length === 1) {
return arr[0].reduce((a, b) => a + b, 0);
}
return arr.reduce((a, b) => a + b, 0);
};
console.log(arrSum(1, 2, 3)); // 6
console.log(arrSum([1, 2, 3])); // 6

在上面的代码中我们使用rest运算符了解更多rest_parameters MDN
我们也可以在像
这样的函数中使用变量 arguments 来使用普通函数
function arrSum(args) {
if (arguments.length === 1) {
return arguments[0].reduce((a, b) => a + b, 0);
} else {
return [].reduce.call(arguments, (a, b) => a + b, 0);
}
}
console.log(arrSum(1, 2, 3));
console.log(arrSum([1, 2, 3]));

了解更多关于
arguments Object MDN
US /文档/网络/ JavaScript的/参考/功能/参数
所以同样的问题可以通过多种方式解决,选择最适合你的方式。
答案 2 :(得分:0)
解决方案示例:
function arrSum( nums ) {
var n = 0;
if ( typeof( nums ) != 'object' )
return arrSum( arguments );
for ( var i = 0; i < nums.length ; i++ )
n += nums[ i ];
return n;
}
arrSum( 1, 2, 3 );
arrSum( [ 1, 2, 3 ] );