【发布时间】:2011-07-12 06:42:03
【问题描述】:
在 SQL Server 中,我可以说:
WHERE X IN(1,2)
你会如何用 JavaScript 重写以下代码:
if (X==1 || X==2) {}
【问题讨论】:
-
不知道能不能写个IN函数。
-
你的问题没有意义。您编写了有效的 JavaScript。
标签: javascript
在 SQL Server 中,我可以说:
WHERE X IN(1,2)
你会如何用 JavaScript 重写以下代码:
if (X==1 || X==2) {}
【问题讨论】:
标签: javascript
if ([1, 2].includes(x)) {
// array has x
}
【讨论】:
使用indexOf 查看x 是否在数组中。
if([1,2].indexOf(x) !== -1)
【讨论】:
只是好玩:
if (X*X+1*2 == (1+2)*X) {}
或不言自明:
if ((X-1)*(X-2) == 0) {}
【讨论】:
没有灵丹妙药。会有一些陷阱。
如果您按照某些答案的建议执行indexOf,则需要记住并非所有浏览器都支持Array.indexOf,因此您需要提供自己的后备方案。此外,这将具有O(n) 的性能,因为它需要遍历整个数组,如果您正在处理一个巨大的数组,这可能并不理想。
如果您按照其他答案的建议使用 in 运算符,您需要记住在 Javascript 对象的属性中始终是字符串,因此如果您正在检查数字,请不要指望 === 检查有效。
在您建议的这个特定示例中,我会选择旧的 if (X==1 || X==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
仍然...不是最可扩展的事情
【讨论】:
x 包含“继承”属性的标识符,则失败:var x = "constructor"; x in {1:true, 2:true} 产生 true。
将数组转换为对象字面量的函数
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']) ) { ... }
【讨论】:
我知道我们在 PHP 中有 in_array() 函数,但我从未听说过 JS 中有类似的函数。 我认为您必须以旧方式进行:
函数包含(a,obj){ var i = a.length; 当我 - ) { if (a[i] === obj) { 返回真; } } 返回假; }【讨论】:
需要 Javascript 1.6
if ((new Array(1, 2)).indexOf(X) != -1) {
}
【讨论】:
尝试使用数组,然后使用它的.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
【讨论】:
Array.indexOf