这是我的代码:
app.post('/ujfeladat', (req, res) => { const {nev, tipus, szid} = req.body; const hianyos = () => { if(tipus === 'hianyos'){ return {rang: -1} } return } db('fl').insert({ nev: nev, tipus: tipus, szid: szid, hianyos() //returns an error }).returning('*') .then(data => res.json(data)) .catch(err => console.log(err)) })
只有rang在tipus === 'hianyos'?
rang
tipus === 'hianyos'
这是你可以做到的:
// Will result in { foo: 'foo', bar: 'bar'} const item = { foo: 'foo', ... true && { bar: 'bar' }, ... false && { falsy: 'falsy' }, } console.log(item)
说明:
短路评估 ( true && {}, false && {}) 将返回一个Object或一个Boolean false值。
true && {}
false && {}
Object
Boolean false
在Object返回 an 的情况下,它的属性会传播并分配给父对象。
在false返回值的情况下,父对象不会被污染,因为 ES6 将false, undefined, null and etc值视为{}. 因此,传播...{}不会将任何属性分配给父对象。有关此的更多详细信息,您可以在此处找到。
false
false, undefined, null and etc
{}
...{}
db('fl').insert({ nev: nev, tipus: tipus, szid: szid, ...tipus === 'hianyos' ? { rang: -1 } : {} })
如您所见,三元运算符总是返回一个object。
如果条件为真,则返回{ rang: -1 },否则为空对象{}。
{ rang: -1 }
之后,我们展开...生成的对象(来自三元运算)并将对象的属性分配给父对象。
...
如果没有任何属性,则不会分配任何内容,这是我们的目标。
代码示例:(有时几行代码胜过几千字)
// Will result in { foo: 'foo', bar: 'bar'} const item = { foo: 'foo', ... true ? { bar: 'bar' } : {}, ... false ? { falsy: 'falsy' } : {}, } console.log(item)
在其他答案中,我解释了相同的想法,但针对数组。