如何用arguments与Object.values()实现多参数乘积函数?遇参数长度异常怎么办?
解决任意参数乘积函数问题
问题分析
- 现有代码仅计算前两个参数乘积:大概率是代码中仅直接取用了
arguments[0]和arguments[1]进行计算,未遍历所有传入的参数。 arguments.length输出为5却以为只传了4个参数:这说明实际调用Multiplyall时传入了5个参数,可能是调用时的参数数量写错了,或者代码中存在隐性传参的情况。
正确实现代码
使用arguments对象结合Object.values()将类数组的arguments转为数组,再遍历计算所有参数的乘积:
function Multiplyall() { // 将arguments转为数组 const args = Object.values(arguments); // 初始化乘积为1(若需处理无参情况可额外判断) let product = 1; for (const num of args) { product *= num; } return product; } // 测试示例 console.log(Multiplyall(2, 3, 4, 5)); // 输出120 // 函数内部打印arguments.length会等于实际传入的参数个数
用reduce简化的版本:
function Multiplyall() { return Object.values(arguments).reduce((acc, curr) => acc * curr, 1); }
关键说明
arguments是函数内部的类数组对象,包含所有传入的实参,它的length属性严格等于实际传入的参数个数,所以如果输出5,务必检查调用函数时的参数数量。Object.values(arguments)可以将arguments这个类数组对象转为真正的数组,方便使用数组方法简化计算逻辑。
内容的提问来源于stack exchange,提问作者Avissa Taghizadeh
相关产品推荐
相关产品推荐

