【发布时间】:2019-08-20 04:22:31
【问题描述】:
当我试图检查一个元素在数组中使用了多少次时,我发现了这段代码。它是由另一个用户编写的,我让它工作,但我试图弄清楚他为什么最后使用“{}”。我知道 .reduce() 方法可以获得 initialValue 但我无法理解大括号的使用。
var a = ["a","b","b","c","a","b","d"];
var map = a.reduce(function(obj, b) { obj[b] = ++obj[b] || 1;
return obj;
}, {});
我认为它们可能是 initialValue 参数,因为它涵盖了结果,但是当我尝试删除大括号时结果不一样。我还检查了 MDN 文档,发现了一些类似的代码,但由于我对 JavaScript 很陌生。
当我们使用大括号时,我得到:
{
a: 2,
b: 3,
c: 1,
d: 1
}
但是当我移除大括号并运行它时,我得到:
a
我尝试使用括号,结果为:[ a: 2, b: 3, c: 1, d: 1 ],
所以大括号似乎包含了值,但它不应该像往常一样在没有大括号的情况下工作吗?
【问题讨论】:
-
文档:Array.prototype.reduce() syntax。
arr.reduce(callback[, initialValue])"initialValue : 用作第一次调用回调的第一个参数的值。如果没有提供初始值,将使用数组中的第一个元素。" -
I know that .reduce() method can get initialValue but I could not understand the use of braces.好吧,如果是var obj = {},你可以理解它,这是相同的 - 对象文字的符号。所以你的初始值将是一个空对象。 -
"我认为它们可能是 initialValue 参数" - 是的。 “但是当我尝试删除大括号时结果不一样” - 为什么您在更改调用时期望得到相同的结果?
-
谢谢大家的评论,我不知道{}是一个空对象。所以我很好奇它是否有一些特殊功能(在这种情况下是一个对象)或者只是对内容进行排序。
标签: javascript iterator iteration