如何在字符串数组中搜索字符串

IT技术 javascript arrays search
2021-01-23 18:50:59

在其他帖子中寻找答案后,我觉得我必须问这个。我查看了如何检查数组是否包含 JavaScript 中的对象? 以及查找项目是否在 JavaScript 数组中的最佳方法?并且无法让代码在那里工作。

我正在捕获一个 html 嵌入代码到一个数组中,所以每个项目都是一行 html 代码。

例如:

i[0]='<param name=\"bgcolor\" value=\"#FFFFFF\" />'
i[1]='<param name=\"width" value=\"640\" />'
i[2]='<param name=\"height\" value=\"360\" />'   
i[3]='more html code' 

我想搜索这个数组并找到“高度”这个词所在的行。

所以理想情况下,我想编写一个函数来返回出现“高度”的项目的索引。

幸运的是,此数组中没有重复项,因此只出现了一次。

通过简单的对象搜索,我得到 'false' 回报。

任何的想法?

6个回答

就像迭代数组并寻找正则表达式一样简单

function searchStringInArray (str, strArray) {
    for (var j=0; j<strArray.length; j++) {
        if (strArray[j].match(str)) return j;
    }
    return -1;
}

编辑-str作为函数的参数。

这应该称为“searchStringArray”,因为可以使用正则表达式而不只是字符串来执行搜索
2021-03-19 18:50:59
非常感谢。虽然我的 JS 代码似乎不起作用。在这里,我尝试使用此搜索功能,以便将新文本附加到与搜索相对应的数组元素。用于数组的 html 代码在这里单击按钮时没有任何反应,问题出在 var 't' 不知何故。如果你评论第 19,20 行,至少按钮会输出代码。但是由于某种原因,当您尝试调用搜索功能时它不起作用。再次感谢。
2021-03-22 18:50:59
因为当这个线程的大部分发生时,array.indexOf() 和 array.find() 不存在。
2021-03-23 18:50:59
if 语句中有一个错字(缺少括号)。我会尽快修复它。顺便说一句,如果您使用 firefox 进行开发,请确保安装 firebug。或者在 Chrome 中使用“检查元素”。这就是我快速发现错误的方式。萤火虫控制台:missing ( before condition [Break On This Error] if stringArray[j].match ("height") return j;
2021-04-09 18:50:59
是的,谢谢。实际上我已经安装了萤火虫,但我不知何故忘记启用它。期待修复,再次感谢。
2021-04-09 18:50:59

您可以在 javascript 中使用 Array.prototype.find 函数。 数组查找 MDN

所以要在字符串数组中查找字符串,代码就变得很简单了。加上作为浏览器的实现,它将提供良好的性能。

前任。

var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find(
    function(str) {
        return str == value;
    }
);

或者使用 lambda 表达式它会变得更短

var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find((str) => str === value);

扩展您链接到的 contains 功能:

containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    if(a[i].search(regex) > -1){
      return i;
    }
  }
  return -1;
}

然后你用一个字符串数组和一个正则表达式调用函数,在你的情况下寻找高度:

containsRegex([ '<param name=\"bgcolor\" value=\"#FFFFFF\" />', 'sdafkdf' ], /height/)

您还可以另外返回找到高度的索引:

containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    int pos = a[i].search(regex);
    if(pos > -1){
      return [i, pos];
    }
  }
  return null;
}
不错,同样的想法,但更通用。
2021-04-04 18:50:59

如果您只是想在字符串值数组中查找第一个子字符串匹配,则避免使用正则表达式会更快您可以添加自己的数组搜索功能:

代码

Array.prototype.findFirstSubstring = function(s) {
            for(var i = 0; i < this.length;i++)
            {
                if(this[i].indexOf(s) !== -1)
                    return i;
            }
            return -1;
        };

用法

i.findFirstSubstring('height');

回报

-1 如果未找到,或者找到第一个子字符串出现的数组索引(在您的情况下为2

如果有人想要一点动态搜索。

 let searchInArray=(searchQuery, array, objectKey=null)=>{

  return array.filter(d=>{
      let data =objectKey? d[objectKey] : d //Incase If It's Array Of Objects.
       let dataWords= typeof data=="string" && data?.split(" ")?.map(b=>b&&b.toLowerCase().trim()).filter(b=>b)
      let searchWords = typeof searchQuery=="string"&&searchQuery?.split(" ").map(b=>b&&b.toLowerCase().trim()).filter(b=>b)

     let matchingWords = searchWords.filter(word=>dataWords.includes(word))

    return matchingWords.length

})
    
    
}

对于字符串数组:

let arrayOfStr = [
  "Search for words",
  "inside an array",
  "dynamic searching",
  "match rate 90%"
]

searchInArray("dynamic search", arrayOfStr)

//Results: [ "Search for words", "dynamic searching" ]

对于对象数组:

let arrayOfObject = [
  {
    "address": "Karachi Pakistan"
  },
  {
    "address": "UK London"
  },
  {
    "address": "Pakistan Lahore"
  }
]

searchInArray("Pakistan", arrayOfObject,"address")

//Results: [ { "address": "Karachi Pakistan" }, { "address": "Pakistan Lahore" } ]