Javascript函数(如SQL中的函数)中的IN运算符

Javascript函数(如SQL中的函数)中的IN运算符,javascript,in-operator,Javascript,In Operator,我尝试了以下操作,但它引发了异常: if (!$get('sslot_hf0').value in ('X', 'Y', 'Z', '0')) { $get('sslot_hf0').value = 'X'; } 我正在寻找一个类似于SQL中中的操作符的函数,但在Javascript中的作用方式不同。您必须使用多个比较,使用|(或或)运算符拆分它们。您可以轻松地将值存储在数组中,并在中使用 var te

我尝试了以下操作,但它引发了异常:

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

我正在寻找一个类似于
SQL

中的
操作符的函数,但在Javascript中的作用方式不同。您必须使用多个比较,使用
|
(或
)运算符拆分它们。

您可以轻松地将值存储在数组中,并在
中使用

  var temparr = ['x', 'y', 'z', '0'];
     if (!$get('sslot_hf0').value in temparr) {
                $get('sslot_hf0').value = 'X';
            }
希望这对您有所帮助

您可以使用


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


否则,希望写入for循环以循环值并执行相等检查。

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

   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
    }
//此函数还遍历继承的属性

i、 在一些包含js库的地方

Array.prototype.foo = 10;

同样的情况也会发生在对象上。检查这把小提琴

编辑::

谢谢大家的评论。。。这是更新后的代码,我认为最好还是保留旧函数。因此,有些人可以注意到其中的差异

function inStruct(val,structure)
    {

      for(a in structure)
         {

           if(structure[a] == val && structure.hasOwnProperty(a))
             {
               return true;
             }
         }
       return false;
    }
创建一个数组

并使用jquery.inArray()进行检查

请阅读此处了解更多SQL:

something in ('X','Y','Z','0')
现代JavaScript(包括IE>8):

更现代的JavaScript(!IE):

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

if(!Array.prototype.includes)Array.prototype.includes=函数(值,开始){
start=parseInt(start)| | 0;
对于(var i=开始;i8:

if(!Array.prototype.includes)Object.defineProperty(Array.prototype,'includes'{
值:函数(值,开始){
start=parseInt(start)| | 0;

对于(var i=start;i使用javascript中的
运算符。我不确定为了完整性,是否可以使用它来实现您想要实现的操作,
中的
用于测试对象中是否存在属性。javascript数组实际上是专门的对象,这一事实使事情更加复杂,因此在
中对数组执行sing
是有效的,但可能不是您想要的。它测试某个内容是否是数组对象的有效属性,但不测试它是否是数组本身中的现有值。
['x','y','z','0']
返回false…请阅读您必须指定的属性名称,而不是值。它为您提供了包含在页面中的算法,正是出于这个原因:)@Sachlen,谢谢你的回答,似乎
indexof
中的
功能的一个很好的替代品,比如
SQL
,但是,你使用的代码抛出了一个异常
$get没有定义
,你有解释为什么
indexof
没有识别“$get”功能吗?这是你的代码,不是我的ine。有关函数的用法,请参见前两行和文档。如果此处未定义
$get
,则您的问题代码中也未定义该函数。@Sachlen,我认为它与
索引有关,这就是我问您的原因,但是,它与此无关,这是迄今为止最好的替换,其他答案可能有效,但眉毛ser兼容性是一个主要问题。Thnaks@rupesh pateli如果阵列原型具有其他属性,则此代码可能会产生意外的结果。@sachlen,请您澄清其他属性的含义。
console.log(inStruct('T','a','B','Z');Array.prototype.foo='T';console.log(inStruct('T','a','B','Z'));
-将返回
false
(预期),
true
(意外)您是对的@sachleen,使用“for…in”和数组迭代是个坏主意,我已经仔细检查了[这个问题]()一个解决方案是用以下内容替换
指令
函数指令(val,结构)
{
for(var i=0;i
如果(structure[i]=val)
返回true;
返回false;
]
感谢您的贡献Sachlen,我希望@Rupesh更新此答案真实的
数组。includes
是不可枚举的。使用
对象。defineProperty
@AuxTaco感谢您的评论。我已经为答案添加了一个变体,尽管它确实需要IE>8。
function inStruct(val,structure)
    {

      for(a in structure)
         {

           if(structure[a] == val && structure.hasOwnProperty(a))
             {
               return true;
             }
         }
       return false;
    }
something in ('X','Y','Z','0')
['X','Y','Z','0'].indexOf(something)>-1
['X','Y','Z','0'].includes(something)
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;
};
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;
    }
});