【问题标题】:How to return a spread operator in a map arrow function in one line [duplicate]如何在一行中返回地图箭头函数中的扩展运算符[重复]
【发布时间】:2019-01-02 06:54:28
【问题描述】:

我需要做的是映射一个数组并将所有对象的值设置为 false。这是我的第一张照片:

data = data.map((item) => {
  item.active = false;
  return item;
})

有效!但是还有 Eslint,no-param-reassign。所以我不得不找到别的东西。经过一番谷歌搜索后,我找到了传播运算符!惊人的!我创造了这个杰作:

data = data.map((item) => {
  return {...item, active: false}
})

看起来很酷,效果也很好。但接下来又是 Eslint,arrow-body-style。好的,我将在同一行返回对象:

data = data.map(item => {...item, active: false});

不工作! :'(我错过了什么吗?

【问题讨论】:

  • 我不认为这种关闭是正确的。真正的问题不是从 lambda 返回对象。
  • @DenysSéguret 目前还不清楚真正的问题是什么以及 OP 真正需要什么,他提出的整个问题都围绕着将数组映射到新对象数组。
  • 真正的问题是如何解决 linter 问题

标签: javascript arrays ecmascript-6 spread-syntax


【解决方案1】:

当从箭头函数构造(lambda)返回一个字面量对象时,你必须将它用括号括起来,这样它才能被视为一个表达式:

data.map(item => ({...item, active: false}));

map 仅在您需要不同的数组时才有用。

但这里有一个更简单的解决方案。您不必重新分配所有项目和data。你应该简单地做

data.forEach(item => item.active=false)

【讨论】:

  • 我知道我错过了一些东西。谢谢你的工作
  • 这可能仍然违反 no-param-reassign 规则。你应该做for (const item of data) item.active = false;
  • 是的,它确实仍然违反了规则。但是还有下一个eslint.org/docs/rules/no-restricted-syntax
  • 第一个带括号的例子有什么缺点吗?
猜你喜欢
  • 1970-01-01
  • 2019-09-04
  • 2020-11-15
  • 1970-01-01
  • 2019-01-22
  • 2020-10-30
  • 2014-04-26
  • 2017-02-28
相关资源
最近更新 更多