javascript - 所有参数的总和(有些参数是数组);总和( [1,2,3,4], 50, 10, [10, 20],1 )

标签 javascript arrays optimization arguments reduce

我有一个函数 sum([1,2,3,4],50,10,[10, 20],1),由两个整数组成和数组以及我想返回所有单个元素的总和。在给定的示例中,总和为 101。

问题:我找到了一种有效的方法,但我想知道我可以做些什么来提高它的效率。

我的方法如下:

  1. 初始化一个新数组;那些数组参数,例如[1,2,3,4],将首先转换为总和,然后推送到新数组中。
  2. for 循环遍历所有参数
  3. 检查,参数是否为数组
    • 如果,则将所有元素相加(通过.reduce())并将总和插入新的数组。
    • 如果,则将元素插入新数组
  4. newArray 转换为 sum (再次通过 .reduce()) 并返回。

代码:

console.log("Result: " + sum([1,2,3,4],50,10,[10, 20],1));

function sum(...allArgs) {

    let newArray = [];
    // go through all args
    allArgs.forEach((elem) => {
        // check if argument is an array
        if (Array.isArray(elem)){
            // arraySum = all Items of array 
            arraySum = elem.reduce((acc, currV) => acc + currV, 0);
            // push arraySum into new Array
            return newArray.push(arraySum);
        }
        // push other arguments (that are not arrays) into new array
        newArray.push(elem);
    });
    // return the sum of the new array
    return newArray.reduce((acc, currV) => acc + currV);
}

我找到了comparable post ,区别在于在那篇文章中没有参数是数组,因此这篇文章。

在此过程中我可以改进什么?

最佳答案

您可以将 forEach 替换为 reduce

function sum(...allArgs) {

  // go through all args
  return allArgs.reduce((sum, elem) => {
      // check if argument is an array
      if (Array.isArray(elem)){
          // arraySum = all Items of array 
          return sum + elem.reduce((s,i)=>s+i,0);
      }else{
        return sum + elem;
      }
  },0);
}

sum([1,2,3],50,10,[10, 20],1)

或嵌套总和

function sum(...allArgs) {
  // go through all args
  return allArgs.reduce((total, elem) => {
    // check if argument is an array
    if (Array.isArray(elem)) {
      return total + sum(...elem);
    } else {
      return total + elem;
    }
  }, 0);
}

sum([1, 2, 3], 50, 10, [10, 20,[11,12]], 1);

关于javascript - 所有参数的总和(有些参数是数组);总和( [1,2,3,4], 50, 10, [10, 20],1 ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930093/

相关文章:

c++ - 如何使用动态数组制作 pop_front

Python、ProjectEuler、优化使代码变慢

javascript - 转换 Symfony2 PHP 实体对象以在 Javascript 中使用

javascript - 元素集上的 SnapSVG 动画回调未触发

当模式匹配字符串时,Javascript/jQuery 比 $.inArray 更快的替代方案

arrays - 一个数组可以处理多少个元素 Node.js

php - 从数组中获取特定值

javascript - 如果在函数内部使用 this() 选择器,它将引用哪个选择器(jQuery)?

mysql 查询优化

c# - C# 中小方法调用的成本和优化