关于 JS 中传播运算符的困惑

Confusion regarding Spread Operator in JS

所以基本上我有对象列表。我正在迭代并且必须更改对象的一个​​ 属性。我有两种情况,一种是我必须更改特定对象的 属性。

 setList(list.map((list_item)=>
      list_item.id===id?{...list_item,doubleClick:true}:list_item
    )

还有另一种情况,我必须更改列表中每个对象的 属性。

setList(list.map((list_item)=>{...list_item,doubleClick:false}))

第一种情况工作正常,但第二种情况抛出错误>解析错误:意外令牌 (34:35)

对我来说,除了第一个有三元运算符外,它们看起来没有什么不同?这有什么不同吗? 第二种情况如何解决?

编辑:所以我认为扩展运算符适用于表达式或声明。

setList(list.map((list_item)=>list_item={...list_item,doubleClick:false}))

这行得通。 有什么更好或正确的方法吗?

在第二种情况下,您需要 return 新对象。

setList(
  list.map((list_item) => {
    return { ...list_item, doubleClick: false };
  })
);

或者更简单的方法是将新对象包裹在 ()

setList(list.map((list_item) => ({ ...list_item, doubleClick: false })));

详细了解语法

编辑:

第三种情况语法没问题,但逻辑不对。您想要 return 新对象,而不是重新分配 .map()

中的元素