我一直在做“检查数组中的字符串”,但绝不是对话。这就是我现在所需要的。目前我有这个:
var Hash = 'http://example.com/place/england,
arr = ['/place/'];
if(Hash.indexOf(arr)) {
alert('it is')
} else {
alert('it is not')
};
问题是,它总是返回true(警告it is
)。我在哪里出错?
答案 0 :(得分:1)
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中,0
为false
,其他数字为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;
答案 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')
};
}