关于 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()
中的元素
所以基本上我有对象列表。我正在迭代并且必须更改对象的一个 属性。我有两种情况,一种是我必须更改特定对象的 属性。
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()