为啥返回带有箭头函数的对象时,array.map 中需要 return 关键字?

Posted

技术标签:

【中文标题】为啥返回带有箭头函数的对象时,array.map 中需要 return 关键字?【英文标题】:Why is return keyword needed in array.map when returning an object with arrow function?为什么返回带有箭头函数的对象时,array.map 中需要 return 关键字? 【发布时间】:2022-01-23 21:57:50 【问题描述】:

在这种情况下,为什么我们必须在 rawApiData.map 回调箭头函数中写 return 关键字?

protected assembleLCodeDealers(rawApiData): DealerLossCodeDealer[] 
    if (rawApiData) 
      return rawApiData.map(p => 
        return 
          code: p.code,
          id: p.id,
          name: p.name
         as DealerLossCodeDealer;
      );
     else 
      return [];
    
  

【问题讨论】:

我对这个问题感到困惑,你不知道map 是如何工作的吗?还是您对箭头函数的语法感到困惑? 如输入所示,assembleLCodeDealers 预计会产生一个数组,因此它必须返回一个数组。如果存在“什么都不做”的情况,则必须返回一个空数组,而不是通常的“什么都不返回,从而产生未定义” 在这种情况下,我需要了解为什么我们必须在 rawApiData.map 之前写 return。 因为否则assembleLCodeDealers 函数不会返回任何内容,而打字表明它必须这样做。 Array.map 创建一个新数组,仅此而已。 【参考方案1】:

您可能会对带有 1 个返回表达式的 arrow function shorthand syntax 感到困惑,这确实不需要显式的 return

但是如果你使用花括号,它会为多个表达式打开一个代码块,而不是一个要返回的对象。

只需将要返回的对象的花括号用括号括起来,以避免它们被解释为代码块:

rawApiData.map(p => (
  code: p.code,
  id: p.id,
  name: p.name
) as DealerLossCodeDealer)

见advanced syntax

【讨论】:

以上是关于为啥返回带有箭头函数的对象时,array.map 中需要 return 关键字?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 学习笔记 - 获取对象子集

为啥我不能在 JavaScript/ES6 中使用带有箭头函数的`new`? [复制]

JavaScript Array map() 方法

尝试使用函数调用返回时,array.map 给出未定义 [重复]

为啥箭头函数名称必须是 const/let?

为啥这个带有布尔变量的函数不起作用?