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

som*_*ser 43 javascript arrays search

在其他帖子中搜索答案后,我觉得我必须问这个问题.我看了如何检查数组是否包含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' 
Run Code Online (Sandbox Code Playgroud)

我想搜索这个数组,找到"高度"这个词的行.

理想情况下,我想编写一个函数来返回出现'height'的项目的索引.

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

通过简单的对象搜索我得到'假'回报.

任何的想法?

Ale*_*dam 51

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

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

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

  • 为什么不使用indexOf在数组中搜索?那时不需要迭代...... (2认同)
  • 因为当大多数线程发生时,array.indexOf()和array.find()不存在. (2认同)

Jan*_*net 11

扩展您链接到的包含函数:

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

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

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

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

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;
}
Run Code Online (Sandbox Code Playgroud)


Che*_*iya 9

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

因此,要在字符串数组中查找字符串,代码变得非常简单.另外,作为浏览器实现,它将提供良好的性能.

防爆.

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

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

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


Ale*_*x W 5

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

代码

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

用法

i.findFirstSubstring('height');
Run Code Online (Sandbox Code Playgroud)

返回值

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