我有一个功能:
function ross(array) {
return array.map(function(data) {
return data.reduce(function(obj, item) {
obj[item[0]] = item[1];
return obj;
}, {});
});
}
ross(array);
这个代码基本上将3维数组转换为对象数组。我想专注于这一部分:
return data.reduce(function(obj, item) {
obj[item[0]] = item[1];
return obj;
}, {});
在return obj
下,您会在逗号(,)旁边看到另外的{}
个括号。如果它是回调或什么,不知道它真正做了什么。但我尝试通过将其更改为[]
来玩它,它实际上将输出更改为二维数组。
那里有谁可以解释额外支架的作用?
答案 0 :(得分:3)
那些{}
定义一个空对象。 reduce
的第二个参数是累加器的种子值,它传递给您的回调。因此,{}
定义了第一次调用时回调看到的obj
(以及所有后续调用,因为它返回obj
)。
该代码在功能上与:
相同var obj = {};
data.forEach(function(item) {
obj[item[0]] = item[1];
});
return obj;
reduce
正在被使用(有人会说 ab 使用,因为累加器永远不会改变;但它真的很常见)来制作一个最外层语句而不是三个
答案 1 :(得分:1)
From MDN:“reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。”
第二个参数是累加器的初始值,它作为参数obj
进入您的函数。如果未指定累加器,则默认值是调用reduce的数组中的第一个元素。