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;
}
});