Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在字符串数组中搜索字符串_Javascript_Arrays_Search - Fatal编程技术网

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

Javascript 如何在字符串数组中搜索字符串,javascript,arrays,search,Javascript,Arrays,Search,在其他帖子中寻找答案后,我觉得我不得不问这个问题。 我看着 而且无法让代码在那里工作 我正在将一个html嵌入代码捕获到一个数组中,因此每个项目都是一行html代码 例如: i[0]='<param name=\"bgcolor\" value=\"#FFFFFF\" />' i[1]='<param name=\"width" value=\"640\" />' i[2]='<param name=\"height\" value=\"360\" />'

在其他帖子中寻找答案后,我觉得我不得不问这个问题。 我看着 而且无法让代码在那里工作

我正在将一个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' 
i[0]=''
i[1]=''
i[2]=''
i[3]=“更多html代码”
我想搜索这个数组并找到单词“height”所在的行

因此,理想情况下,我想编写一个函数,返回出现“height”的项的索引

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

通过简单的对象搜索,我得到“false”返回


有什么想法吗?

扩展链接到的contains函数:

containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    if(a[i].search(regex) > -1){
      return i;
    }
  }
  return -1;
}
containsRegex(a,regex){
对于(变量i=0;i-1){
返回i;
}
}
返回-1;
}
然后使用字符串数组和正则表达式调用函数,以查找高度:

containsRegex([ '<param name=\"bgcolor\" value=\"#FFFFFF\" />', 'sdafkdf' ], /height/)
containsRegex([''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;
}
containsRegex(a,regex){
对于(变量i=0;i-1){
返回[i,pos];
}
}
返回null;
}

只需迭代数组并查找regexp即可

function searchStringInArray (str, strArray) {
    for (var j=0; j<strArray.length; j++) {
        if (strArray[j].match(str)) return j;
    }
    return -1;
}
函数searchStringInArray(str,strArray){
对于(var j=0;j,如果您只是尝试在字符串值数组中查找第一个子字符串匹配项,则可以更快地查找。您可以添加自己的数组搜索函数:

代码

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');
返回

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

您可以在javascript中使用array.prototype.find函数。

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

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

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

如果有人想要一个小的动态搜索

 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" } ]
var newArr=[];
函数searchStringInArray(str,strArray){
newArr=[];
strArray.map(项=>{
str.includes(项目)?newArr.push(项目):“”;
});
返回newArr;
}
var result=searchStringInArray('肯定',他用实事求是的语气说,“['事情','肯定');
console.log(结果);

要在数组中搜索,只需使用迭代方法(forEach/map)即可,在数组中使用JavaScript字符串搜索方法即可

参考文献

示例

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

let matchingStrings = [];

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

MatchingString数组将包含所有可能出现的事件的列表

很好,相同的想法,但更通用。非常感谢。但我的JS代码似乎不起作用。我正在尝试使用此搜索功能,以便将新文本附加到数组元素,之后与搜索相对应。数组使用的html代码为。单击按钮时不会发生任何事情,问题出在var't'上。如果您对第19,20行进行注释,至少按钮会输出代码。但是由于某种原因,当您尝试调用搜索函数时,它不起作用。再次感谢。if语句中有一个输入错误(缺少括号)。我会尽快修复它。顺便说一句,如果您使用firefox开发,请确保安装firebug。或者在Chrome中使用“inspect element”。这就是我快速发现bug的原因。firebug控制台:
缺失(在条件[Break On This Error]之前,如果stringArray[j].match(“height”)return j;
yep,谢谢。实际上我安装了firebug,但不知怎么忘记启用它。期待修复,再次感谢。这应该称为“searchStringArray”,因为搜索可以使用正则表达式执行,而不仅仅是stringBecause数组。indexOf()和array.find()在大多数线程发生时都不存在。