【问题标题】:Sum of arguments [duplicate]参数总和[重复]
【发布时间】:2022-01-02 21:11:34
【问题描述】:

朋友们,我需要帮助!

我们需要实现 sum 函数,它接受无限数量的数字作为参数并返回它们的总和。

没有参数的函数调用应该返回 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)    
};

我不能忽略那些不能转为数字的数据类型的值,如果可能的话,把值转为数字。

如果你能帮忙,我将不胜感激

【问题讨论】:

    标签: javascript


    【解决方案1】:

    你可以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

    【讨论】:

      【解决方案2】:

      您可以尝试强制类型强制(将数组的项目转换为数字)。如果 JS 成功强制,则添加它,否则,回退到 0:

      您也可以将其 one-liner 设为:

      const sum = (...arr) => arr.reduce((a, i) => a + (+i || 0), 0);
      

      const sum = (...arr) => {
        return arr.reduce((a, i) => {
          return 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

      【讨论】:

      • 非常感谢我的朋友!
      • @Art 如果对您有帮助,请点赞并接受答案:) [为无耻的插件道歉!]
      • 感谢@decpk 编辑。
      • 我做到了 :) 再次感谢@KanishkAnand
      • 谢谢@decpk
      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 2021-04-15
      • 2022-07-21
      • 2021-02-21
      • 2011-07-19
      • 2020-03-19
      • 2020-12-19
      相关资源
      最近更新 更多