как добавить что-то к объекту, если у него его еще нет - PullRequest
0 голосов
/ 26 октября 2018

Имея дело с ES6, у меня есть объект, и мне нужно что-то добавить к нему, если у него его еще нет, поэтому ниже моя работа:

const a = {name:"haha",address:"here",rate:6};
const b = {rate:3,...a};

, поэтому, если объект a имеетчто rate оно останется, но если его нет, rate:3 будет добавлено к объекту.НО, я помню, что мы могли сделать это с оператором || (или &&, я не помню, какой оператор).не могли бы вы рассказать мне, как это было сделано таким образом?

Ответы [ 4 ]

0 голосов
/ 26 октября 2018

До использования объекта можно было использовать:

const a = {name:"haha",address:"here",rate:6};
const b = Object.assign({}, a, { rate: a.rate || 3 });
console.log(b);

Но это может работать не так, как задумано, потому что использование || основано на предыдущем выражении truey . Если a.rate неверно, но все еще определено, как пустая строка или 0, то оно будет перезаписано, поэтому может быть лучше избежать || и явно проверить, определен ли a.rate или нет, что может быть введенным в свойство rate кратко с условным оператором:

const a = {name:"haha",address:"here",rate:6};
const b = Object.assign({}, a, {
  rate: a.rate === undefined ? 3 : a.rate
});
console.log(b);
0 голосов
/ 26 октября 2018

Вы можете инициализировать значение с помощью || используя:

const val = something || somethingElse;

Однако, это не работает так же хорошо при использовании его для объектов. * Например 1004 *

const obj1 = { rate: 1 };
obj1.rate = obj1.rate || 1; // this is fine
obj1.rate = obj1.rate || obj2.rate; // if obj1.rate and obj2.rate do not exist, obj1.rate will be set to undefined. But that's not always what you want. If you don't want rate set at all, this would be an unexpected result
0 голосов
/ 26 октября 2018

Используйте ключевое слово in, чтобы проверить, существует ли свойство

b.rate = 'rate' in b ? a.rate : 3;
0 голосов
/ 26 октября 2018

«Старый» способ сделать это будет:

b.rate = a.rate || 3; // This would fail if a.rate === 0
b.rate = a.rate === undefined ? 3 : a.rate; // This would fail if a.rate === null
b.rate = a.rate === undefined || a.rate === null ? 3 : a.rate;

Вы также можете использовать Object.assign для имитации распространения объекта:

const b = Object.assign({rate: 3}, a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...