gpt4 book ai didi

javascript - 如何在使用 reduce() 计算数组中值的实例后返回 ES6 Map 对象?

转载 作者:行者123 更新时间:2023-11-29 11:01:17 25 4
gpt4 key购买 nike

我刚开始学习 JavaScript,这是我的家庭考试的一部分,这个要求对我来说非常棘手。

我们有很多方法可以在 JS 中计算对象中值的实例,但在这里我必须通过调用 reduce() 并返回一个 ES6 映射对象来实现它。

要求如下:

/**
* Takes an array of items, and returns a Map with the
* frequencies (counts) of each item in the array.
*
* Must do this by using a single call to reduce.
*
* For example,
* freqs([1, 2, 3, 2, 7, 2, 1]) returns Map {1 => 2, 2 => 3, 3 => 1, 7 => 1}
* freqs("One fish two fish red fish blue fish".split(' '))
* returns Map {"One" => 1, "fish" => 4, "two" => 1, "red" => 1, "blue" => 1}
*/

到目前为止,这是我的代码:

function freqs(items) {
var map = new Map();
return items.reduce(function(allkey, key) {
if (map.has(key)) {
var value = map.get(key);
map.set(key, value++);
} else {
map.set(key, 1);
}
return map;
}, {})
}

我使用调试器发现 map.set(key, value++) 在迭代时不会覆盖 map 中的新值。为什么?

所以当我输入 C = [1,2,3,2,7,2,1]; 时,输出总是这样的:

Map(4) {1 => 1, 2 => 1, 3 => 1, 7 => 1}

有什么建议吗?

最佳答案

您的代码的问题是 a++ 在添加 1 之前返回 a 的值:

var a = 1;
console.log(a++);
console.log(a);

由于 Map#set 在修改后返回 map ,您可以像这样简化代码:

function freqs(items) {
return items.reduce(
(map, e) => map.set(e, (map.get(e) || 0) + 1),
new Map()
);
}

或者,您可以使用有点晦涩且很少见的增量运算符前缀,它也会增加变量,但返回它的增量新版本:

var a = 1;
console.log(++a);
console.log(a);

关于javascript - 如何在使用 reduce() 计算数组中值的实例后返回 ES6 Map 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46699654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com