当前位置: 首页 > 知识库问答 >
问题:

为什么括号在这个. duce()语法中的作用是创建JavaScript对象?[重复]

穆季萌
2023-03-14

以下代码展示了JavaScript 的三种用法。reduce():

  1. 加起来一个总和
  2. 构建数组
  3. 构建一个脚本对象

如何理解第三个例子中大括号周围增加的括号?它们只是为了不让对象括号被解释为函数括号吗?还是他们有其他目的?

是否有其他方法来编写第三个示例,以使该语法更加明确,例如,是否可以在多行函数中构建JavaScript对象?

const languages = ['french', 'french', 'spanish', 'polish', 'spanish', 'german', 'spanish', 'polish', 'spanish', 'spanish', 'french', 'spanish', 'english', 'french', 'spanish', 'english', 'french', 'english'];

// 1. iterating while adding a sum
const sum = languages.reduce((acc, language) => {
    acc++;
    return acc;
}, 0);
console.log(`There are ${sum} entries.`);

// 2. iterating while building an array
const initials = languages.reduce((acc, language) => {
    acc.push(language.substring(0, 1));
    return acc;
}, []);
console.log(initials);

// 3. iterating while building a JavaScript object
const totals = languages.reduce((acc, language) => ({
    ...acc,
    [language]: acc[language] ? acc[language] + 1 : 1
}), {});
console.log(totals);

共有1个答案

沃威
2023-03-14

是的,它们是为了防止括号被读作功能括号,因为:

.reduce((acc,language) => acc)

如果没有大括号,箭头函数将返回右侧的内容。它相当于这里:

.reduce((acc,language) => { return acc })

如果你想返回一个对象{},你不能简单地使用大括号,它们将被解释为函数大括号,所以你需要把它们括在括号里

.reduce((acc,language) => ({...acc})

这相当于:

.reduce((acc,langauge) => {
   return {...acc};
})
 类似资料:
  • 唉,很难在谷歌上搜索大括号之类的符号。 我遇到了这个代码: 在里面https://en.cppreference.com/w/cpp/utility/functional/less. 语句、

  • 我更喜欢后端而不是前端,但是JavaScript引起了我的兴趣。我试图把我的头围绕在我看来是多种不同的建模对象的方法上。 在过去的几年里,我主要是在编写与此类似的代码(假设jQuery已加载): 这样我就可以简单地调用来启用特定的表单,非常类似于PHP中的静态方法调用。 我最近一直在PHP中使用闭包,我知道它们在JavaScript中也存在(我正在使用它们)。我试图更彻底地理解这个概念。在遇到这个

  • 问题内容: 我不知道以下内容: 我的问题是: 将函数放在方括号.ie中是什么意思? 函数结束时,这组括号会做什么? 我通常在jquery代码和其他一些JavaScript库中看到这些。 问题答案: 您将立即使用特定参数调用匿名函数。 一个例子: 这提醒“ 彼得 ”。 对于jQuery,您可以将其作为参数传递并在函数中使用。因此,您仍然可以在noConflict-mode中使用jQuery,但可以使

  • 问题内容: 我碰到了这段JavaScript代码,但是我不知道该怎么做。运行此代码时为什么会得到“1”?(1)的这个奇怪的小附录是什么?为什么函数用括号括起来? 问题答案: 这里发生了一些事情。首先是立即调用的函数表达式(IIFE)模式: 这提供了一种在自己的范围内执行某些JavaScript代码的方法。通常使用它,以便在函数内创建的任何变量都不会影响全局范围。您可以改用以下方法: 但这需要给函数

  • 问题内容: 我可以看到有两种不同的导入方式 第二个有括号。那么两者之间有什么区别?什么时候应该加上括号?谢谢 问题答案: 那么,是否应该 在方括号中 导入组件之间的区别在于您的方式。 出口有两种类型 默认导出 命名为出口 组件可以有 一个默认导出,零个或多个命名 导出 如果组件是默认导出,则需要不带括号将其导入,例如 导入为 命名的出口可能像 要么 您可以将其导入为 要么 如果您的组件有一个默认导

  • 问题内容: 这是什么? 这是不时出现的关于JavaScript语法的问题的集合。这也是社区Wiki, 因此邀请所有人参与维护此列表。 为什么是这样? 堆栈溢出不允许搜索特定字符。结果,在搜索运算符和其他语法标记时,不容易找到许多问题。这也使得关闭重复项变得更加困难。下面的列表可以帮助解决此问题。 主要思想是链接到Stack Overflow上的现有问题,因此我们更容易引用它们,而不是复制ECMAS