6

我尝试了以下方法,但它引发了异常:

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

我正在寻找类似于IN运算符的功能SQL

4

7 回答 7

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) {
  //...
}
于 2013-01-01T05:31:35.303 回答
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/

编辑::

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

function inStruct(val,structure)
    {

      for(a in structure)
         {

           if(structure[a] == val && structure.hasOwnProperty(a))
             {
               return true;
             }
         }
       return false;
    }
于 2013-01-01T06:13:55.200 回答
1

in在 Javascript 中的功能不同。您必须使用||(or OR) 运算符使用多重比较来拆分它们。

于 2013-01-01T05:16:14.537 回答
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)

如果您需要includes旧版浏览器(包括 IE)的简单 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;
    }
});
于 2018-08-24T03:05:45.537 回答
0

如果你想要有用的集合操作函数并且不介意添加库,请查看underscorejs

否则期望编写 for 循环来循环值并执行相等检查。

于 2013-01-01T05:34:26.410 回答
0

创建一个数组

并使用 jquery.inArray() 检查

在这里阅读更多http://api.jquery.com/jQuery.inArray/

于 2013-01-01T07:41:11.397 回答
-1

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

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

希望这可以帮助

于 2013-01-01T05:29:12.350 回答