在Javascript数组中测试值

时间:2011-03-09 21:53:30

标签: javascript

在SQL Server中,我可以说:

WHERE X IN(1,2)

如何在JavaScript中重写以下内容:

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

9 个答案:

答案 0 :(得分:80)

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

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

答案 1 :(得分:11)

使用Array .includes method

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

答案 2 :(得分:8)

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

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

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

答案 3 :(得分:7)

没有银弹。会有一些陷阱。

如果您按照某些答案建议indexOf,则需要记住所有浏览器都不支持Array.indexOf,因此您需要提供自己的后备广告。此外,它的性能为O(n),因为它需要遍历整个数组,如果你正在处理一个庞大的数组,这可能并不理想。

如果你使用in运算符作为其他答案的建议,你需要记住,在Javascript对象的属性总是字符串,所以如果你正在检查,不要期望===检查工作号。

在你建议的这个特定例子中,我只想找到好的if (X==1 || X==2)

答案 4 :(得分:2)

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

或者,如果你想抽象它,你可以这样做http://snook.ca/archives/javascript/testing_for_a_v

功能oc(a) {   var o = {};   for(var i = 0; i

仍然......不是最具扩展性的事情

答案 5 :(得分:1)

需要Javascript 1.6

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

答案 6 :(得分:1)

我知道PHP中有in_array()函数,但我从未听说过JS中的类似函数。 我想你必须用旧的方式做到这一点:

function contains(a, obj) {
  var i = a.length;
  while (i--) {
    if (a[i] === obj) {
      return true;
    }
  }
  return false;
}

答案 7 :(得分:1)

将数组转换为对象字面值的函数

function oc(a)
{
 var o = {};
 for(var i=0;i<a.length;i++)
 {
  o[a[i]]='';
 }
  return o;
}

你可以像

一样调用这个函数
if( name in oc(['Tom', 'Harry','Sue']) ) { ... }

答案 8 :(得分:0)

很有趣:

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

或自我解释:

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