这是我的代码:
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'
?
答案 0 :(得分:9)
以下是您可以这样做的方法:
// 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
值。
如果返回Object
,其属性将被传播并分配给父对象。
如果返回false
值,则父对象不会受到污染,因为ES6会将false, undefined, null and etc
值视为{}
。因此,传播...{}
不会将任何属性分配给父对象。有关此问题的更多详细信息,您可以找到here.
以下是您可以这样做的方法:
db('fl').insert({
nev: nev,
tipus: tipus,
szid: szid,
...tipus === 'hianyos' ? { rang: -1 } : {}
})
<强>说明强>:
正如您所见,三元运算符始终返回对象。
如果条件为 true ,则返回{ rang: -1 }
,否则返回空对象{}
。
之后,我们展开...
结果对象(来自三元操作),并将对象的属性分配给父对象。
如果没有任何属性,则不会分配任何内容,这是我们的目标。
代码示例:(有时几行代码比成千上万的单词更好)
// Will result in { foo: 'foo', bar: 'bar'}
const item = {
foo: 'foo',
... true ? { bar: 'bar' } : {},
... false ? { falsy: 'falsy' } : {},
}
console.log(item)
在其他答案中,我解释了相同的想法,但对于数组。您也可以查看here。