简体   繁体   English

有条件地更改 object 属性

[英]Conditionally change object property

I'm changing object property based on condition.我正在根据条件更改 object 属性。 I'm using react Let's say an object:我正在使用反应让我们说一个 object:

obj = {a: 4, b: 6, ...}

Now I want to change obj.a if flag is true so I can do something like below:现在我想改变obj.a如果标志为真,所以我可以做如下的事情:

setState({...obj, a: flag === true ? 6 : obj.a})

Is there any other way to do it, I don't want to use ternary operator like above because in the nested object it looks nasty.还有其他方法吗,我不想像上面那样使用三元运算符,因为在嵌套的 object 中它看起来很讨厌。

I also don't want to copy the object and change it like below:我也不想复制 object 并将其更改如下:

 const obj_copy = {...obj}
 if(flag) obj_copy = 4;
 setState({...obj_copy))

Recently I came across the ?.最近我遇到了?. which is really helpful.这真的很有帮助。

// we can change this
obj && obj.a === 'text' ? ... : ...

// into
obj?.a === 'text' ? ... : ...

I'm looking for something like above... Just for knowledge purpose is there any way to do this?我正在寻找类似上面的东西......只是为了知识目的有没有办法做到这一点?

You could a logical AND with the check and an object for spreading.您可以对检查进行逻辑 AND 和 object 进行传播。

 let obj = { a: 4, b: 6 }, flag = true; console.log({...obj, ...flag === true && { a: 6 } }); flag = false; console.log({...obj, ...flag === true && { a: 6 } });

You could use Object.assign to conditionally assign the property like this:您可以使用Object.assign有条件地分配属性,如下所示:

setState(Object.assign({ ...obj }, flag === true ? { a: 6 } : {}))

Moreover, if flag is a boolean or you can accept any truthy value, I'd remove the equals signs:此外,如果flag是 boolean 或者您可以接受任何真实值,我将删除等号:

setState(Object.assign({ ...obj }, flag ? { a: 6 } : {}))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM