减少函数额外括号含义 - JS

时间:2017-06-19 02:09:35

标签: javascript arrays

我有一个功能:

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下,您会在逗号(,)旁边看到另外的{}个括号。如果它是回调或什么,不知道它真正做了什么。但我尝试通过将其更改为[]来玩它,它实际上将输出更改为二维数组。

那里有谁可以解释额外支架的作用?

2 个答案:

答案 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的数组中的第一个元素。