和的参数
和的参数
朋友们,我需要帮助!
我们需要实现一个求和函数,该函数接受无限个数字作为参数,并返回它们的总和。
如果函数调用没有参数,则应返回0。如果参数不是数字且无法转换为数字,则应忽略它。如果可以转换为数字,则将其加起来,就像普通数字一样。
用法示例:
console.log( sum(1, 2, 3, 4, 5, 6), ); // 21 console.log( sum(-10, 15, 100), ); // 105 console.log( sum(), ); // 0 console.log( sum(1, 'fqwfqwf', {}, [], 3, 4, 2, true, false), ); // 11. true = 1
我的尝试:
const sum = (...arr) => { return arr.reduce((a, i) => { if (isNaN(i)) return Number(i) return a + Number(i) }, 0) };
我无法忽略那些无法转换为数字的数据类型的值,并将值转换为数字(如果可能的话)。
如果你能帮忙,我将非常感激。
问题的出现原因是在对数组求和的过程中,可能存在非数字元素。解决方法是使用`filter`方法过滤数组中的非数字元素,并使用`reduce`方法求和。
下面是解决问题的代码:
const sum = (...arr) => arr.filter(Number).reduce((a, c) => a + c, 0); console.log(sum(1, 2, 3, 4, 5, 6)); // 21 console.log(sum(-10, 15, 100)); // 105 console.log(sum()); // 0 console.log(sum(1, "fqwfqwf", {}, [], 3, 4, 2, true, false)); // 11. true = 1
以上代码中,`sum`函数接受一个不定数量的参数,并使用扩展运算符将参数转换为数组。然后,使用`filter`方法过滤数组中的非数字元素,`Number`函数可以将非数字元素转换为`NaN`,因此可以用`filter(Number)`来过滤出数字元素。最后,使用`reduce`方法对过滤后的数组进行求和操作,初始值为0。
通过以上代码,可以得到正确的求和结果。例如,`console.log(sum(1, 2, 3, 4, 5, 6));`将输出21,表示1到6的数字之和。`console.log(sum(-10, 15, 100));`将输出105,表示-10、15和100的和。`console.log(sum());`将输出0,表示没有参数时的和为0。`console.log(sum(1, "fqwfqwf", {}, [], 3, 4, 2, true, false));`将输出11,因为在过滤后的数组中,true被转换为1,所以最终求和为11。
(Sum of arguments)问题的出现原因是需要对给定的参数进行求和,但是参数可能是任意类型,包括数字、字符串、对象等。为了解决这个问题,可以尝试对参数进行类型强制转换,将数组的每个元素转换为数字。如果转换成功,则进行求和,否则将其作为0处理。下面是一个解决方法的示例代码:
const sum = (...arr) => arr.reduce((a, i) => a + (+i || 0), 0); console.log(sum(1, 2, 3, 4, 5, 6)); // 输出:21 console.log(sum(-10, 15, 100)); // 输出:105 console.log(sum()); // 输出:0 console.log(sum(1, "fqwfqwf", {}, [], 3, 4, 2, true, false)); // 输出:11。true被转换为1
这段代码通过使用reduce方法来对参数数组进行求和。在每一次迭代中,使用箭头函数对当前元素进行类型转换。如果转换成功,则将其加到累加器a上,否则将其作为0处理。最后,返回求和的结果。
希望这个回答对你有所帮助!如果是的话,请点赞并接受答案。感谢你的阅读和编辑!