为什么括号在创建 JavaScript 对象的 .reduce() 语法中起着作用?
Why are the role of the parentheses in this .reduce() syntax which creates a JavaScript object?
下面的代码展示了 JavaScript .reduce()
的三种用法:
- 加起来
- 建立数组
- 构建一个 JavaScript 对象
如何理解第三个例子中大括号周围添加的括号?它们就在那里,这样对象大括号就不会被解释为函数大括号吗?还是他们有其他目的?
是否有另一种方式来编写第三个示例,以便该语法更明确,例如能否以某种方式在多行函数中构建 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);
是的,它们的存在是为了防止括号被读作函数大括号,因为:
.reduce((acc,language) => acc)
如果没有大括号,箭头函数将 return 右边是什么。它相当于这里:
.reduce((acc,language) => { return acc })
如果你想 return 一个对象 {}
你不能简单地使用大括号,它们会被解释为函数大括号,所以你需要将它们括在括号中
.reduce((acc,language) => ({...acc})
这相当于:
.reduce((acc,langauge) => {
return {...acc};
})
下面的代码展示了 JavaScript .reduce()
的三种用法:
- 加起来
- 建立数组
- 构建一个 JavaScript 对象
如何理解第三个例子中大括号周围添加的括号?它们就在那里,这样对象大括号就不会被解释为函数大括号吗?还是他们有其他目的?
是否有另一种方式来编写第三个示例,以便该语法更明确,例如能否以某种方式在多行函数中构建 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);
是的,它们的存在是为了防止括号被读作函数大括号,因为:
.reduce((acc,language) => acc)
如果没有大括号,箭头函数将 return 右边是什么。它相当于这里:
.reduce((acc,language) => { return acc })
如果你想 return 一个对象 {}
你不能简单地使用大括号,它们会被解释为函数大括号,所以你需要将它们括在括号中
.reduce((acc,language) => ({...acc})
这相当于:
.reduce((acc,langauge) => {
return {...acc};
})