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

时间:2011-03-24 19:32:12

标签: javascript arrays search

在其他帖子中搜索答案后,我觉得我必须问这个问题。 我看了How do I check if an array includes an object in JavaScript?Best way to find if an item is in a JavaScript array?并且无法使代码在那里工作。

我正在将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' 

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

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

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

使用简单的对象搜索我得到'false'返回。

有什么想法吗?

7 个答案:

答案 0 :(得分:51)

这就像迭代数组并寻找正则表达式

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

修改 - 将str作为功能参数。

答案 1 :(得分:11)

扩展您链接的包含功能:

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;
}

答案 2 :(得分:9)

您可以在javascript中使用Array.prototype.find函数。 Array 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);

答案 3 :(得分:4)

如果您只是尝试在字符串值数组中找到第一个子字符串匹配,那么avoid using regular expressions会更快。您可以添加自己的数组搜索功能:

<强>代码

2

<强>用法

require

<强>返回

如果找不到

-1,或者找到第一个子字符串出现的数组索引(在您的情况下为const data = require('./data.json'); console.log( data.result.items[0].purpose_name );

答案 4 :(得分:0)

万一有人要进行一些动态搜索。

java -cp your-spring-boot.jar -Dloader.main=<Main Class Name in embedded Library> org.springframework.boot.loader.PropertiesLauncher <Pprovide any parameters required for Main Class>

对于字符串数组:

 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" ]

答案 5 :(得分:0)

var newArr= [];
function searchStringInArray (str, strArray) {
       newArr = [];
    strArray.map(item => {
        str.includes(item) ? newArr.push(item) : '';
    });
  return newArr;
}

var result = searchStringInArray('Definitely",he said in a matter-of-fact tone.', ['matter', 'definitely']);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

答案 6 :(得分:0)

要在数组中搜索,您可以简单地使用迭代方法(forEach/map),并在其中使用JavaScript 字符串搜索方法

参考https://www.w3schools.com/jsref/jsref_search.asp

示例

const arrayOfLists = ['ape', 'apple', 'auto'];
const searchString = "A"

let matchingStrings = [];

arrayOfLists.forEach((list) => {
    if (list.toLocaleLowerCase().search(searchString.toLocaleLowerCase()) > -1) {
        matchingStrings.push(list)
    }
})

ma​​tchingStrings 数组将包含所有可能出现的列表