分配,并有条件地设置js对象属性

2 javascript

这是我的代码:

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))
})
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能将rang属性添加到对象中tipus === 'hianyos'

Jor*_*nev 13

更新的答案:

这是你如何做到的:

// Will result in { foo: 'foo', bar: 'bar'}
const item = {
  foo: 'foo',
  ... true && { bar: 'bar' },
  ... false && { falsy: 'falsy' },
}

console.log(item)
Run Code Online (Sandbox Code Playgroud)

说明:

短路评估(true && {},false && {})将返回一个Object或一个Boolean false值.

Object返回的情况下,其属性将被传播并分配给父对象.

false返回的情况下,父对象不会被污染,因为ES6将false, undefined, null and etc值视为{}.因此,spread ...{}不会将任何属性分配给父对象.关于这方面的更多细节,你可以在这里找到.


原始答案:

这是你如何做到的:

db('fl').insert({
  nev: nev,
  tipus: tipus,
  szid: szid,
  ...tipus === 'hianyos' ? { rang: -1 } : {}
})
Run Code Online (Sandbox Code Playgroud)

解释:

如您所见,三元运算符始终返回一个对象.

如果条件为,则返回{ rang: -1 },否则返回空对象{}.

之后,我们展开...结果对象(来自三元操作),并将对象的属性分配给父对象.

如果没有任何属性,则不会分配任何内容,这是我们的目标.

代码示例:(有时是几行代码不是几千字的好)

// Will result in { foo: 'foo', bar: 'bar'}
const item = {
  foo: 'foo',
  ... true ? { bar: 'bar' } : {},
  ... false ? { falsy: 'falsy' } : {},
}

console.log(item)
Run Code Online (Sandbox Code Playgroud)

在其他答案中,我解释了相同的想法,但对于数组.你也可以在这里查看.