2011-12-28 175 views
1

在Javascript中,可以使用“in”运算符检查数组中是否出现字符串?使用“in”检查字符串中是否出现字符串

对于如:

var moveAnims = new Array("fly", "wipe", "flip", "cube"); 

    alert("wipe" in moveAnims); 
    alert("fly " in moveAnims); 
    alert("fly" in moveAnims); 
    alert("Cube" in moveAnims); 

或者是只有这样,才能做到这一点反复?

var moveAnims = new Array("fly", "wipe", "flip", "cube"); 
var targets  = new Array("wipe", "fly ", "fly", "Cube"); 

for (var i=0; i<moveAnims.length; i++) 
{ 
    for (var j=0; j<targets.length; j++) 
     if (targets[j] == moveAnims[i]) 
      alert("Found "+targets[j]); 
} 
+0

看看http://stackoverflow.com/questions/237104/array-containsobj-in-javascript你的答案。 – 2011-12-28 21:47:29

+0

你不能使用'in'。这只是检查具有给定名称的a *属性*是否存在于对象中。 – 2011-12-28 21:48:02

回答

2

您应该可以使用.indexOf()来获取对象的位置。检查它是否是-1以查看它是否不存在。

2

不,因为in操作员检查对象的,该对象在数组中是0, 1, 2, ...

您可以使用indexOf,但是:

if(~moveAnims.indexOf("fly")) { // ~ is a useful hack here (-1 if not found, and 
    // ...      // ~-1 === 0 and is the only falsy result of ~) 
} 

注意indexOf是不是在旧的浏览器可用,但也有垫片在那里。

+1

'-1'的否定结果是通过实现来定义的。在所有系统上''**'可能不会等于二进制'1111 1111'。 OP应该检查这个值是否等于'-1',如果要在几个开发人员之间传递代码,它将保证工作并且会减轻可读性。 – 2011-12-28 21:51:57

+0

@refp:感谢您的注意,但我认为这个公式只是'〜x === -x - 1',同样在这里指出(http://en.wikipedia.org/wiki/Bitwise_operation#NOT)。和' - -1 - 1 === 0'。 – pimvdb 2011-12-28 21:53:53

+0

IIRC ecma标准并不强制实施它的系统使用二进制补码,即使不常见,也有其他系统可以表示负数。 OP可能(也可能会)使用你的方法是安全的,但它不是100%保证。 – 2011-12-28 21:58:07

1

尝试indexOf

moveAnims.indexOf('string') 
相关问题