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

时间:2018-05-16 09:27:53

标签: 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))
})

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

1 个答案:

答案 0 :(得分:9)

更新回答:

以下是您可以这样做的方法

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

console.log(item)

<强>说明:

短路评估(true && {}false && {})会返回ObjectBoolean 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