Javascript中的IN运算符与SQL中的运算符类似

时间:2013-01-01 05:13:39

标签: javascript in-operator

我尝试了以下内容,但它抛出异常:

                if (!$get('sslot_hf0').value in ('X', 'Y', 'Z', '0')) {
                $get('sslot_hf0').value = 'X';
            }

我正在寻找与IN

中的SQL运算符类似的函数

7 个答案:

答案 0 :(得分:3)

您可以使用indexOf

['X', 'Y', 'Z', '0'].indexOf('Z')
> 2
['X', 'Y', 'Z', '0'].indexOf('T')
> -1

if (['X', 'Y', 'Z', '0'].indexOf($get('sslot_hf0').value) !== -1) {
  //...
}

答案 1 :(得分:2)

您可以使用以下函数用于相同目的,第二个参数可以是数组或对象,第一个参数是您在数组或对象中搜索的值。

   function inStruct(val,structure)
        {

          for(a in structure)
             {
               if(structure[a] == val)
                 {
                   return true;
                 }
             }
           return false;
        }
if(inStruct('Z',['A','B','Z']))
    {
       //do your stuff
    }

//此函数也遍历继承的属性

即在某些包含js库的地方

Array.prototype.foo = 10;

 instruct(10,[1,2,3]) // will return true

对象也会发生同样的情况。检查这个小提琴   http://jsfiddle.net/rQ8AH/17/

EDITED ::

谢谢大家的评论......这是更新的代码,我认为保留旧功能也更好。所以,有人可以注意到差异。

function inStruct(val,structure)
    {

      for(a in structure)
         {

           if(structure[a] == val && structure.hasOwnProperty(a))
             {
               return true;
             }
         }
       return false;
    }

答案 2 :(得分:1)

in在Javascript中的功能不同。您必须使用||(或OR)运算符进行多次比较。

答案 3 :(得分:1)

SQL:

something in ('X','Y','Z','0')

现代JavaScript(包括IE> 8):

['X','Y','Z','0'].indexOf(something)>-1

更多现代JavaScript(!IE):

['X','Y','Z','0'].includes(something)

如果您需要传统浏览器(包括IE)的简单includes polyfill:

if(!Array.prototype.includes) Array.prototype.includes =function(value,start) {
    start=parseInt(start)||0;
    for(var i=start;i<this.length;i++) if(this[i]==value) return true;
    return false;
};

根据AuxTaco的评论,以下是适用于IE> 8的polyfill版本:

if (!Array.prototype.includes) Object.defineProperty(Array.prototype, 'includes', {
    value: function(value,start) {
        start=parseInt(start)||0;
        for(var i=start;i<this.length;i++) if(this[i]==value) return true;
        return false;
    }
});

答案 4 :(得分:0)

如果您想要有用的设置操作功能并且不介意添加库,请查看underscorejs

否则期望写入for循环来循环遍历值并执行相等性检查。

答案 5 :(得分:0)

创建一个数组

并使用jquery.inArray()来检查

请在此处阅读更多http://api.jquery.com/jQuery.inArray/

答案 6 :(得分:-1)

你可以做到这一点,既好又容易,将值存储在数组中并使用IN

  var temparr = ['x', 'y', 'z', '0'];
     if (!$get('sslot_hf0').value in temparr) {
                $get('sslot_hf0').value = 'X';
            }

希望这会有所帮助