假设我有一个需要检查两个不同值之一匹配的函数。但是,输入非常复杂:
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
}
}
显然,第二种方法输入的次数较少,并且比第一种方法更容易重构。他们如何比较记忆/速度呢?
答案 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
}
该陈述由以下部分组成:
if语句(显然)
数组定义:['onething ','theotherthing']
在先前定义的数组上调用方法includes()
。
在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)){