【问题标题】:JS spread opperator inside a map not working? [duplicate]地图内的JS传播运算符不起作用? [复制]
【发布时间】:2025-12-02 13:10:01
【问题描述】:

为什么这不起作用(使用 Lodash 地图功能):

const data1 = [{test:"test"}];
const data2 = _.map(data1, ((item) => {...item, id:1}));

但这确实:

const data3 = [{test:"test"}];
const data4 = _.map(data3, ((item) => Object.assign({}, item, {id:1})));

地图外也可以:

const data5 = {test:"test"};
const data6 = {...data5, id:1}

【问题讨论】:

  • 如果您不想编写返回语句,则需要将对象包装到括号中。喜欢=> ({...item, id:1})

标签: javascript ecmascript-6 lodash


【解决方案1】:

在使用 ES6 返回“组合”对象时,您只是使用了错误的语法。如果你使用箭头函数并且需要隐式返回和对象你需要用()包装它:

Array.map 相同。这是 ES6 的示例,因为在这种情况下 lodash 并没有真正发挥作用。

const data1 = [{test:"test"}];
const data2 = data1.map(item => ({...item, id:1}));

console.log(data2)

Rest 使用 Object.assign 为您进行对象合并并返回它,最后只是一个对象文字。

【讨论】:

    【解决方案2】:

    在这行const data2 = _.map(data1, ((item) => {...item, id:1})); 不将() 放在返回值周围会使解释器认为您正在用{} 打开一个块

    尝试将其更改为const data2 = _.map(data1, ((item) => ({...item, id:1})));

    【讨论】:

      【解决方案3】:

      要在映射中返回对象,需要将其包装在() 中。所以当你做map((item) => {...item, id:1})应该是map((item) => ({...item, id:1}))

      const data1 = [{test:"test"}];
      const data2 = data1.map((item) => ({...item, id:1}));
      console.log(data2);
      

      【讨论】:

      • 一个没有任何解释的原始代码 sn-p 真的很容易。至少你应该指出你做了什么改变。最好提及你为什么做出这样的改变。
      • @Marie 你是对的,对不起。
      【解决方案4】:

      如果是对象文字,您需要这样做

      当您使用{ 时,它被解释为函数的起始大括号,而不是您需要使用return

      =>{...item, id:1} 这里的{ 被解释为函数的起始大括号,因此展开运算符会抛出错误。

      const data1 = [{test:"test"}];
      const data2 = data1.map((item) => {return{...item, id:1}});
      console.log(data2);

      附言 对于那些认为没有使用 loadash 给出答案的投票者

      const data1 = [{test:"test"}];
      const data2 = _.map(data1, ((item) => {return {...item, id:1}}));
      

      【讨论】:

      • 我没有投反对票,但我认为您没有使用 Loadash,OP 要求提供 loadash 地图。
      • @carkod 好吧,无论您是否使用 loadash,这个答案都适用。我试图解释概念。反正问题