Условно изменить свойство объекта - PullRequest
1 голос
/ 14 июля 2020

Я меняю свойство объекта в зависимости от условия. Я использую реакцию. Скажем, объект:

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

Теперь я хочу изменить obj.a, если флаг истинен , чтобы я мог сделать что-то вроде ниже:

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

Есть ли другой способ сделать это, я не хочу использовать тернарный оператор, как указано выше, потому что во вложенном объекте он выглядит неприятно.

Я также не хочу копировать объект и измените его, как показано ниже:

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

Недавно я наткнулся на ?., который действительно полезен.

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

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

Я ищу что-то подобное выше ... Просто для знаний цель есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы можете использовать Object.assign, чтобы условно назначить свойство следующим образом:

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

Более того, если flag является логическим или вы можете принять любое правдивое значение, я бы удалил знаки равенства :

setState(Object.assign({ ...obj }, flag ? { a: 6 } : {}))
1 голос
/ 14 июля 2020

Можно логическое И с чеком и объектом для распространения.

let obj = { a: 4, b: 6 },
    flag = true;

console.log({ ...obj, ...flag === true && { a: 6 } });
flag = false;
console.log({ ...obj, ...flag === true && { a: 6 } });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...