检查字符串中的数组元素

时间:2015-04-22 06:07:48

标签: javascript

我一直在做“检查数组中的字符串”,但绝不是对话。这就是我现在所需要的。目前我有这个:

var Hash = 'http://example.com/place/england,
    arr = ['/place/'];

if(Hash.indexOf(arr)) {
    alert('it is')
} else {
    alert('it is not')
};

问题是,它总是返回true(警告it is)。我在哪里出错?

3 个答案:

答案 0 :(得分:1)

如果找不到,则{p> indexOf会返回-1,找到0...n-1。因此,当it is(评估为['/place/'].toString()不在字符串的开头时,您说/place/;只有在零位置找到it is not时才会得到-1

相反,您要测试arr = ['/place/', '/time/']。此外,如果要测试数组的所有元素而不是数组的连接(因为,如果"/place/,/time/"最终会搜索字符串// iteration (functional style) var found = arr.some(function(element) { return Hash.indexOf(element) !== -1; }); ),那么您想要做其他事情,如迭代或正则表达式。

// regular expression approach
function escapeRegExp(string){
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
var pattern = new RegExp(arr.map(escapeRegExp).join('|'));
var found = pattern.test(Hash);

escapeRegExp

(来自MDN的{{1}})

答案 1 :(得分:1)

您需要遍历数组进行比较。第二件事你的情况不是以理想的方式写的。

if(Hash.indexOf(arr)) 

.indexOf()-1找不到其他> -1。在js中,0false,其他数字为true,因此您始终可以获得真正的警报。



var Hash = 'http://example.com/place/england',
  arr = ['/place/'];
var i = arr.length;
while (i--)
  if (-1 < Hash.indexOf(arr[i]))
    alert('found, ' + arr[i]);
  else
    alert('not found, ' + arr[i]);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

String.prototype.indexOf只接受一个字符串作为参数,并且你传递一个数组。访问数组的第一个元素,获取字符串,或者如果它可以包含多个元素,则遍历整个数组。

if(Hash.indexOf(arr[0])) {
//                 ^^^ access first element

或循环整个数组:

for(var i=0; i<arr.length; i++){
    if(Hash.indexOf(arr[i])) {
        alert('it is')
    } else {
        alert('it is not')
    };
}