Я хотел бы использовать сокращенное значение свойства, но только когда значение определено, рассмотрим следующий пример:
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' }
Для использования сокращенного свойства 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 });
Я думаю, вам нужно что-то вроде этого:
const personByName = name => {
const person = http(name);
const result = { method: 'byName' };
if (person) { result.person = person; }
return result;
}
Там нет пропусков, объявляющих свойство объекта, если оно undefined
.
result
... Я думаю, вы правы, что нет способа пропустить неопределенное свойство.
В 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 )
http.get(name)
?