在javascript数组中测试值

Test for value in Javascript Array

本问题已经有最佳答案,请猛点这里访问。

在SQL Server中,我可以说:

1
WHERE X IN(1,2)

如何用javascript重写以下内容:

1
if (X==1 || X==2) {}


使用indexOf查看x是否在数组中。

1
if([1,2].indexOf(x) !== -1)

使用数组.includes方法。

1
2
3
if ([1, 2].includes(x)) {
  // array has x
}


尝试使用数组,然后使用它的.indexOf()

1
2
3
4
5
6
 var myNumbers = [1,2];
 var foo = 4;
 var bar = 1;

 var exists = (myNumbers.indexOf(bar) > -1); //true
 var notExists = (myNumbers.indexOf(foo) > -1); //false


没有银弹。会有一些问题。

如果按照某些答案的建议执行indexOf,则需要记住,并非所有浏览器都支持Array.indexOf,因此需要提供自己的回退。另外,由于它需要遍历整个阵列,因此它的性能将达到O(n),如果您处理的是一个巨大的阵列,这可能不是理想的。

如果按照其他答案的建议使用in操作符,则需要记住,在javascript对象中,属性始终是字符串,因此,如果要检查数字,则不要期望===检查工作。

在你建议的这个特别的例子中,我只会选择好的旧的if (X==1 || X==2)


1
if (x in {1:true, 2:true}) { }

或者,如果你想抽象它,你可以这样做:

函数OC(a){VaR={};对于(var i=0;i)

还是…不是要做的最可扩展的事情


函数将数组转换为对象文本

1
2
3
4
5
6
7
8
9
function oc(a)
{
 var o = {};
 for(var i=0;i<a.length;i++)
 {
  o[a[i]]='';
 }
  return o;
}

你可以像这样调用函数

1
if( name in oc(['Tom', 'Harry','Sue']) ) { ... }


我知道我们在php中有数组()函数,但我从未在js中听说过类似的函数。我觉得你应该用老办法:

1
2
3
4
5
6
7
8
9
function contains(a, obj) {
  var i = a.length;
  while (i--) {
    if (a[i] === obj) {
      return true;
    }
  }
  return false;
}

需要javascript 1.6

1
2
if ((new Array(1, 2)).indexOf(X) != -1) {
}

只是好玩:

1
if (X*X+1*2 == (1+2)*X) {}

或者自我解释:

1
if ((X-1)*(X-2) == 0) {}