【问题标题】:Javascript Search for a match and output the whole string that the matching word is apart ofJavascript 搜索匹配并输出匹配单词所在的整个字符串
【发布时间】:2015-10-17 15:35:41
【问题描述】:

你将如何输出找到的输出,包括字符串的其余部分?该数组只是充满了字符串。谢谢

    var searchingfor = document.getElementById('searchfield').value;
        var searchingforinlowerCase = searchingfor.toLowerCase();
        var searchDiv = document.getElementById('searchDiv');
        var convertarraytoString = appointmentArr.toString();
        var arraytolowerCase = convertarraytoString.toLowerCase();
        var splitarrayString = arraytolowerCase.split(',')



        if(search(searchingforinlowerCase, splitarrayString) == true) {
                alert( searchingforinlowerCase + ' was found at index' + searchLocation(searchingforinlowerCase,splitarrayString) + ' Amount of times found = ' +searchCount(searchingforinlowerCase,splitarrayString));


        function search(target, arrayToSearchIn) {

        var i;

          for (i=0; i<arrayToSearchIn.length; i++)
        {   if (arrayToSearchIn[i] == target && target !=="")
        return true;
        }

【问题讨论】:

  • 返回 arrayToSearchIn[i] 而不是 truesearchLocation 定义在哪里?
  • 对不起,我没有包含查找位置的功能,
  • 要求返回匹配的整个字符串,还是只返回匹配数组中的剩余字符串?可以包含要匹配的字符串示例,appointmentArr 问题中的数组?
  • 不只是一个词,例如,如果他们在搜索字段中输入“美国”,然后单击搜索,结果应该会返回找到“美国”的整个字符串,所以结果将显示具有该匹配词的任何字符串...等名字:约翰,位置:“美国:
  • 所以一个典型的字符串就像 var dummyAppointments = new Array('25/05/2015','0800','0900','TSV5555','America')

标签: javascript arrays search indexof


【解决方案1】:

试试这个

if(search(searchingforinlowerCase, appointmentArr) == true) {
                    alert( searchingforinlowerCase + ' was found at index' + searchLocation(searchingforinlowerCase,splitarrayString) + ' Amount of times found = ' +searchCount(searchingforinlowerCase,splitarrayString));


function search(target, arrayToSearchIn) {
var i; 
for (i=0; i<arrayToSearchIn.length; i++)
{   if (arrayToSearchIn[i].indexOf(target >= 0))
        return true;
}
    return false;
}

此代码将帮助您找到匹配项。您可以更新代码以显示找到匹配项的全文。原始发布的代码是比较整个字符串而不是部分匹配。

【讨论】:

  • 好的,这找到了,但是我如何得到与其相关的字符串被打印出来哈?
  • 非常感谢!现在,如果我希望能够打印出多个匹配项,是否需要将每个匹配项推送到函数中的新数组?
  • 太棒了!如果我要将这些字符串写入表格,您必须在函数中执行还是可以通过变量执行?
  • 你总是将计算和显示代码分开。最好从搜索函数中返回一个匹配的字符串数组,然后将所有返回的结果显示在一个表格中。
  • 如何返回索引和字符串?是返回arrayToSearchIn[i] 还是只返回i?或者像 return arrayToSearchIn[i],i;
【解决方案2】:

你可以这样做

var test = 'Hello World';
if (test.indexOf('Wor') >= 0)
{
  /* found substring Wor */
}

在您发布的代码中,您将数组转换为字符串,然后再次使用 split() 将其转换回数组。那是不必要的。搜索可以调用为

search(searchingforinlowerCase, appointmentArr);

【讨论】:

  • 嗯,好像不行,我刚试过if (appointmentArr.indexOf(searchingforinlowerCase) >= 0) { alert("Found") /* found substring Wor的方法*/ }
【解决方案3】:

尝试使用Array.prototype.filter()String.prototype.indexOf()

// input string
var str = "america";
// array of strings
var arr = ["First Name: John, Location:'america'", "First Name: Jane, Location:'antarctica'"];
// filter array of strings
var res = arr.filter(function(value) {
  // if `str` found in `value` , return string from `arr`
  return value.toLowerCase().indexOf(str.toLowerCase()) !== -1
});
// do stuff with returned single , or strings from `arr`
console.log(res, res[0])

【讨论】:

    【解决方案4】:

    下面将在字符串数组中查找一个单词,并返回所有匹配该单词的字符串。这是你要找的东西吗?

    var a  = ["one word", "two sentence", "three paragraph", "four page", "five chapter", "six section", "seven book", "one, two word", "two,two sentence", "three, two paragraph", "four, two page", "five, two chapter",];
    
    function search(needle, haystack){
        var results = [];
      haystack.forEach(function(str){
            if(str.indexOf(needle) > -1){
                results.push(str);
            }
      });
        return results.length ? results : '';
    };
    
    var b = search("word", a);
    console.log(b);
    

    这里是fiddle 尝试。

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      相关资源
      最近更新 更多