【问题标题】:Counting instances of values in an object using Array.prototype.reduce()使用 Array.prototype.reduce() 计算对象中值的实例
【发布时间】:2023-01-25 01:59:55
【问题描述】:

这是一个 MDN 示例Array.prototype.reduce()我不太明白:

const names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"];

const countedNames = names.reduce((allNames, name) => {
    const currCount = allNames[name] ?? 0;
    return {
        ...allNames,
        [name]: currCount + 1,
    };
}, {});

// countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }

allNames[name] ?? 0...allNames,在这里是什么意思,它是如何生成结果的?谢谢!

搜索了...??的意思,还是看不懂allNames[name]的用法?这和array[index] 一样吗?

【问题讨论】:

标签: javascript reduce


【解决方案1】:
const currCount = allNames[name] ?? 0

这是对Nullish coalescing operator 的使用。意思是变量currCount会先尝试赋值allNames[name]。但是,如果这导致“无效”值(在本例中为 undefined,因为在 allNames 中没有为特定的 name 分配任何内容),那么该变量将被分配给 0

return {
...allNames,
};

这是传播运算符和object destructuring 的使用。这意味着将使用旧 allNames 对象的所有属性(键和值)创建一个新对象。

[name]: currCount + 1,

这部分说要创建一个新属性,其中键作为特定名称,值作为当前计数加一。结合上面的 sn-p,这将创建一个与 allNames 相同的新对象,除了具有键 name 的属性将被覆盖,新值具有更新的计数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 2016-07-13
    • 2018-01-22
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多