在 JavaScript 中获取 Map 中所有值的总和
Get the Sum of all Values in a Map using JavaScript
要获取 a 中所有值的总和Map
:
- 声明一个
sum
变量并将其初始化为0
. - 使用该
forEach()
方法迭代Map
. - 在每次迭代中,将数字添加到
sum
,重新分配变量。
索引.js
const map1 = new Map([ ['key1', 1], ['key2', 2], ]); let sum = 0; map1.forEach(value => { sum += value; }); console.log(sum); // 👉️ 3
我们传递给方法的函数Map.forEach()
会为对象中的每个元素调用Map
。
该forEach()
方法返回undefined
,因此我们需要声明一个sum
存储状态的变量。
请注意,我们使用
let
关键字来声明变量。 sum
使用声明的变量const
不能重新赋值。
我们使用
Map()
构造函数创建了一个Map
具有 2 个键值对的对象。
我们传递给Map.forEach方法的函数
使用 3 个参数调用:
value
当前迭代的key
当前迭代的Map
被迭代的对象
在每次迭代中,我们将当前值添加到sum
并重新分配变量。
索引.js
const map1 = new Map([ ['key1', 1], ['key2', 2], ]); let sum = 0; map1.forEach(value => { sum += value; }); console.log(sum); // 👉️ 3
一旦函数遍历整个Map
对象,我们就将总数存储在sum
变量中。
或者,您可以使用for...of
循环。
for...of
使用循环获取 Map 中所有值的总和
这是一个四步过程:
- 声明一个
sum
变量并将其初始化为一个空数组。 - 使用该
Map.values()
方法获取地图值的迭代器。 - 使用
for...of
循环迭代迭代器。 - 将每个值添加到
sum
变量。
索引.js
const map1 = new Map([ ['key1', 1], ['key2', 2], ]); let sum = 0; for (const value of map1.values()) { sum += value; } console.log(sum); // 👉️ 3
Map.values
方法返回 Map 值的迭代器对象。
索引.js
const map1 = new Map([ ['key1', 1], ['key2', 2], ]); // 👇️ [Map Iterator] { 1, 2 } console.log(map1.values());
我们使用for...of
循环来迭代迭代器对象。
在每次迭代中,我们将当前值添加到sum
变量中。
或者,您可以使用该reduce()
方法。
使用 获取 Map 中所有值的总和reduce()
这是一个三步过程:
- 使用该
Map.values()
方法获取地图值的迭代器。 - 使用
Array.from()
方法将迭代器转换为数组。 - 使用该
Array.reduce()
方法获取值的总和。
索引.js
const map1 = new Map([ ['key1', 1], ['key2', 2], ['key3', 3], ]); const values = Array.from(map1.values()); const sum = values.reduce((accumulator, current) => { return accumulator + current; }, 0); console.log(sum); // 👉️ 6
Array.from
方法从提供的可迭代对象创建一个新的
浅拷贝数组。
我们将迭代器转换为数组以便能够使用该Array.reduce()
方法。
我们传递给回调函数的第二个参数是变量的初始值
accumulator
(0
在我们的例子中)。在每次迭代中,我们将当前Map
值添加到累积数并返回结果。
累积的数字在每次迭代时传递给回调函数,直到sum
计算出值。
您选择哪种方法是个人喜好的问题。我会使用该
Map.forEach()
方法,因为我发现它非常直接和直观。