具有多个agruments的Javascript函数

时间:2017-12-22 12:57:38

标签: javascript ecmascript-6

我有一个将数组作为输入的函数。 如何修改它以使用变量参数和数组。 例如,我希望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]))

3 个答案:

答案 0 :(得分:10)

您可以将spread syntaxconcat一起使用。在第一种情况下,你将获得内部另一个数组的数组,在第二种情况下只是一个参数数组但是[].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 ] );