Сокращение значения свойства ES6 из неопределенного - PullRequest
0 голосов
/ 07 июня 2018

Я хотел бы использовать сокращенное значение свойства, но только когда оно определено, рассмотрим следующий пример:

const personByName = name => {
  const person = http(name)
  return { person, method: 'byName' }
}

personByName('john') // found person: { person: { name: 'john', age: 30 }, method: 'byName' }
personByName('paul') // not found: { method: 'byName' }

Но текущий вывод, который я получаю:

personByName('paul') // not found: { person: undefined, method: 'byName' }

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Чтобы использовать сокращенное свойство, можно использовать Object.assign:

const personByName = name => {
  const person = http(name);
  return Object.assign({ method: 'byName' }, person && { person });
}

Последующие необъектные Object.assign аргументы эффективно игнорируются, поэтому ложный person не делаетне влияет на результат.

Это будет работать, если ожидается, что person будет объектом, как показано в исходном коде.

В случае, если не разрешены только неопределенные значения, это:

Object.assign({ method: 'byName' }, person !== undefined && { person });
0 голосов
/ 07 июня 2018

В ES2018 вы можете использовать троичный оператор для eval, если определено a, и разброс объекта для построения объекта, который содержит a и b или просто b:

const a = 1
const b = { b: 2 }
const c = a ? { a, ...b } : b

console.log( c ) 

const a = undefined
const b = { b: 2 }
const c = a ? { a, ...b } : b

console.log( c ) 
0 голосов
/ 07 июня 2018

Я думаю, вы хотите что-то вроде этого:

const personByName = name => {
  const person = http(name);
  const result = { method: 'byName' };
  if (person) { result.person = person; }
  return result;
}

Нельзя пропускать объявление свойства объекта, если оно undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...