var p = ["array of words", "i really hate the sun", "i'm TIred"]
function findword(contents,pattern){
var answer;
var idx;
var counter = 0;
var pat_lc = pattern.toLowerCase();
for (var i = 0; i <= contents.length-1; i++){
var str_lc = contents[i].toLowerCase();
idx = str_lc.indexOf(pat_lc)
if (idx >= 0){
answer = i
}
else{
answer = "-1"
}
}
alert(answer)
}
findword(p,"words")
我正在尝试在字符串数组中找到某个单词的数组索引,但它只适用于上面数组中的某些单词。例如,在代码的最后一行,当我选择搜索“单词”时,它分别返回“answer”和“idx”-1的值,它应分别为0和9。但是,当我搜索“累”时,“回答”的值为2,“idx”为4(这是正确的)。为什么有些单词有效,其他单词返回-1的值?
答案 0 :(得分:1)
这是一个修改后的工作版本,可以找到所有匹配项
var p = ["array of words", "i really hate the sun", "i'm TIred"]
function findword(contents,pattern){
var matches=[];
var idx;
var pat_lc = pattern.toLowerCase();
for (var i = 0; i <= contents.length-1; i++){
var str_lc = contents[i].toLowerCase();
idx = str_lc.indexOf(pat_lc)
if (idx >= 0){
matches.push({ idx: i, position: idx})
}
}
return matches
}
几个问题
回答和idx被覆盖for
循环传递。因此,无论是否找到匹配项,都只返回最后一次传递。我将结果保存到返回的单独数组中。您提供的代码未对idx
执行任何操作。
可以测试输出的长度以查看是否存在匹配...没有匹配将返回没有长度的空数组
想一想......不确定你想要什么输出
答案 1 :(得分:0)
一旦找到解决方案,就应该停止。
只有在遍历整个数组时,程序才会停止。但如果答案不是最后一个元素呢?然后answer
将包含-1
。
您可以answer
初始化-1
并继续for loop
,只要i
小于content.length
且answer
等于-1
:http://jsfiddle.net/#&togetherjs=dbVcN8JkKP