Javascript:条件检查的快捷语法?

时间:2017-03-14 19:03:22

标签: javascript syntax shortcut

假设我有一个需要检查两个不同值之一匹配的函数。但是,输入非常复杂:

function checker(id, value){
  if (this.state.users[id].items[value].name === 'onething ' ||
    this.state.users[id].items[value].name === 'theotherthing ' ){
    // my action
  }
}

我最终做的是:

function checker(id, value){
  var name = this.state.users[id].items[value].name
  if (name === 'onething ' || name === 'theotherthing '){
    // my action
  }
}

有没有办法做这样的事情:

function checker(id, value){
  if (this.state.users[id].items[value].name === 'onething ' || 'theotherthing '){
    // my action
  }
}

显然,第二种方法输入的次数较少,并且比第一种方法更容易重构。他们如何比较记忆/速度呢?

3 个答案:

答案 0 :(得分:3)

您可以使用Array#indexOf并针对-1

进行测试
if (['onething ', 'theotherthing '].indexOf(this.state.users[id].items[value].name ) !== -1){

答案 1 :(得分:2)

在ECMAScript 2016中,您可以执行以下操作:

if (['onething ','theotherthing'].includes(this.state.users[id].items[value].name)) {
    //do stuff
}

该陈述由以下部分组成:

  1. if语句(显然)

  2. 数组定义:['onething ','theotherthing']

  3. 在先前定义的数组上调用方法includes()

  4. 在javascript中,数组是一个具有任何其他对象的方法的对象。其中一种方法是includes(),它检查参数是否包含在数组中。此方法的返回类型是boolean,因此它由if语句直接计算,没有任何强制转换

    有关includes()方法here

    的更多信息

答案 2 :(得分:0)

您可以使用对象表示法:

if (this.state.users[id].items in {"onething ":1, "theotherthing ":1}){

或者,正则表达式也可以工作 - 更短但效率更低:

if (/onething |theotherthing /.test(this.state.users[id].items)){