尝试通过map()方法从数组中获取所有数字的总和

Naf*_*iaz 0 javascript ecmascript-6

首先,我创建了一个普通函数来获取数组元素的总和 [1,2,3,4,5,6,7,8,9],它可以工作,我得到 45 作为输出。之后我有使用 map() 方法尝试相同的逻辑,以便我可以将总和结果放入数组中。但在 map() 方法中,它没有给我所有数组元素的总和,而是给了我这个输出 [1,3,5,7,9,11,13]。如果我在构建逻辑时犯了任何错误,可以请向我解释一下,如果我想使用 map() 方法来添加数组元素,那么逻辑是什么。下面我附上了代码。

//normal function to get the sum of array numbers

const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];

      function add(nums) {
            let sum = 0;

        for (const num of nums) {
            sum = sum + num;
      }
            return sum;
}
Run Code Online (Sandbox Code Playgroud)

console.log(添加(数组));

//map() method

const numbers = [1, 2, 3, 4, 5, 6, 7];

let add = numbers.map((num, sum = 0) => sum = sum + num);

console.log(add);
Run Code Online (Sandbox Code Playgroud)

Kon*_*owy 7

你不能用 求和mapmap始终返回一个具有相同长度的新数组。

你想使用reduce

const numbers = [1, 2, 3, 4, 5, 6, 7];
const result = numbers.reduce((sum, num) => sum + num);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

正如TJ Crowder在评论中建议的那样,如果数组为空,跳过第二个参数可能会导致失败

const numbers = [];
const result = numbers.reduce((sum, num) => sum + num);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

所以如果可以的话最好使用它

const numbers = [];
const result = numbers.reduce((sum, num) => sum + num, 0);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • 好吧,你*可以*用 `sum` 来做到这一点,但只能通过[滥用 `map`](https://thenewtoys.dev/blog/2021/04/17/misusing-map/) *(披露:那是我的文章)*。所以你不应该。:-) (2认同)