【问题标题】:Why doesn't Array#map return the correct array?为什么 Array#map 不返回正确的数组?
【发布时间】:2017-05-09 13:05:24
【问题描述】:

当我写这样的东西时:

var x = [1,2,3].map(x => { a : 'hello' });

我希望收到类似[{a:'hello'},{a:'hello'},{a:'hello'}] 的信息,但它会返回undefineds 的列表。这是为什么呢?

【问题讨论】:

  • var x = [1,2,3].map(x => ({ a : 'hello' }));

标签: javascript arrays ecmascript-6


【解决方案1】:

“对象”被视为一个块,因为arrow functions 有多种可接受的语法。它们包括一个包含多个语句的块:

param1 => { statements }
(param1, param2, …, paramN) => { statements }

实际上,您当前的代码被解释为带有label 和字符串表达式的块,而不是对象文字。因此,您的回调不会返回任何内容,并且您的数组变成了 undefineds 的数组。

用括号括起来,使其是一个表达式并解释为一个对象字面量(因为块不是表达式,它们是语句,分组内的代码必须是一个表达式):

var x = [1,2,3].map(x => ({ a : 'hello' }));

【讨论】:

    【解决方案2】:

    您需要在对象周围加上一些括号,否则您会得到 block statementlabel

    为防止箭头函数出现block语句,需要使用grouping operator获取表达式作为返回值。

    var x = [1, 2, 3].map(x => ({ a: 'hello' }));
    
    console.log(x);

    【讨论】:

      【解决方案3】:

      您需要将返回的对象放在括号中:

      var x = [1,2,3].map(x => ({ a : 'hello' }));
      

      否则,花括号中的代码将被视为函数体。

      【讨论】:

        【解决方案4】:
        var x = [1,2,3].map(x => ({ a : 'hello' }));
        

        【讨论】:

          猜你喜欢
          • 2022-11-01
          • 2013-12-04
          • 1970-01-01
          • 1970-01-01
          • 2017-09-05
          • 2020-02-03
          • 2020-07-04
          • 1970-01-01
          • 2011-08-06
          相关资源
          最近更新 更多