【问题标题】:Trying to search through array of strings for a pattern the user inputs - javascript尝试在字符串数组中搜索用户输入的模式 - javascript
【发布时间】:2023-04-02 13:48:01
【问题描述】:
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")

我正在尝试在字符串数组中查找某个单词的数组索引,但它仅适用于上面数组中的某些单词。例如,在代码的最后一行,当我选择搜索“words”时,它会返回“answer”和“idx”的值 -1,而应该分别为 0 和 9。但是,当我搜索“tired”时,“answer”的值为 2,“idx”为 4(这是正确的)。为什么有些词有效,而另一些则返回 -1 的值?

【问题讨论】:

标签: javascript arrays string loops indexing


【解决方案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
}

几个问题

answer 和 idx 在 for 循环中被覆盖。因此,无论是否找到匹配项...仅返回最后一次传递。我将结果保存到返回的单独数组中。您提供的代码对 idx 没有任何作用。

可以测试输出的长度以查看是否存在匹配项...没有匹配项将返回没有长度的空数组

想一想……不知道你想要什么输出

DEMO

【讨论】:

    【解决方案2】:

    一旦找到解决方案,您应该立即停止。

    您的程序仅在遍历整个数组时才会停止。但是,如果答案不在最后一个元素中呢?然后answer 将包含-1

    只要i 小于content.length 并且answer 等于-1,您就可以在-1 处初始化answer 并继续您的for loophttp://jsfiddle.net/#&togetherjs=dbVcN8JkKP

    【讨论】:

    • 如果匹配多个会发生什么?警报无济于事
    • @charlietfl 提问者没有详细说明什么是正确答案。我的答案将给出所有匹配项。哦,它是你的 =)
    • 谢谢你,我完全明白现在发生了什么。
    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 2011-12-08
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    相关资源
    最近更新 更多