【问题标题】:Mapping to objects in a lambda function JavaScript - Why doesn't it work without parens? [duplicate]映射到 lambda 函数 JavaScript 中的对象 - 为什么没有括号它不能工作? [复制]
【发布时间】:2020-05-08 02:08:32
【问题描述】:

我在节点中运行以下命令,无法理解为什么一个有效而另一个无效。这里我有一个数组 s,其中 s = [1, 2, 3, 4]。我想将每个数字映射到一个对象。我已经尝试了很长时间:

s.map(i => {name: i})

返回一个未定义的列表。

最后我意识到它可以使用括号:

s.map(i => ({name: i}))

这提供了我想要的输出:[ { name: 1 }, { name: 2 }, { name: 3 }, { name: 4 } ]

我觉得有一个我不理解的 JavaScript 概念。为什么这不起作用?

【问题讨论】:

    标签: javascript arrays object ecmascript-6


    【解决方案1】:

    这是因为=> { 代表一个块函数,而不是返回一个对象。

    将对象括在括号中没有任何作用,它只是中断了该模式=> {,这意味着它被解释为简洁的箭头函数而不是块箭头函数,并且您可以返回该对象。

    所以,如果你想返回一个对象,你可以把它用括号括起来(这是最简单的方法):

    s.map(i => ({ name: i }));
    

    或者使用块函数:

    s.map(i => {
      return { name: i };
    });
    

    (顺便说一句,您可以通过传入name 作为map 参数名称来使您的函数更简洁:

    s.map(name => ({ name }));
    

    正如下面Tomasz 所指出的,您第一次尝试返回undefined 列表的原因是因为name: 是JavaScript 中label 的语法——而您当时只是标记name:声明变量i - 所以你的代码基本上看起来像这样的ES5:

    s.map(function(i) {
      name: i
      // No return so it returns `undefined`
    });
    

    【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2021-12-29
    • 2019-04-24
    • 2020-08-18
    • 2011-01-26
    • 2022-07-06
    • 2013-06-15
    • 2019-11-20
    相关资源
    最近更新 更多