一尘不染

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

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))
})

只有rangtipus === 'hianyos'?


阅读 101

收藏
2022-06-24

共1个答案

一尘不染

更新的答案:

这是你可以做到的

// 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返回 an 的情况下,它的属性会传播并分配给父对象。

false返回值的情况下,父对象不会被污染,因为 ES6 将false, undefined, null and etc值视为{}. 因此,传播...{}不会将任何属性分配给父对象。有关此的更多详细信息,您可以在此处找到。


原答案:

这是你可以做到的

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

说明

如您所见,三元运算符总是返回一个object

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

之后,我们展开...生成的对象(来自三元运算)并将对象的属性分配给父对象。

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

代码示例:(有时几行代码胜过几千字

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

console.log(item)

在其他答案中,我解释了相同的想法,但针对数组。

2022-06-24