根据部分字符串匹配找到数组值的索引号

时间:2018-09-24 08:12:34

标签: javascript jquery

我一直坚持这样做,因为混合数组+字符串匹配并不是我最好的选择。

我想做的是基于字符串的部分匹配返回数组中的索引号。完整的用例;根据数组中的值检查URL中是否存在文本-并返回数组位置的索引。

不要介意JS或jQuery,但最好的方法是行之有效的(或可行的)。

当前尝试:

示例URL = www.site.com/something/car/123

另一个示例URL可能是www.site.com/something/somethingelse/banana/

(要匹配的代码段的位置并不总是在相同的路径位置)

var pageURL = location.href;
var urlArray = ['/car/','/boat/','/apple/','/banana/'];
function contains(urlArray, value) {
var i = urlArray.length;
while (i--) { if (urlArray[i].indexOf(pageURL)) console.log(i)} console.log('Not Found');}

使用jQuery的替代方法(不确定在哪里使用indexOf或其他jQuery替代方法(.search / .contains)):

urlArray.each(function(){
$.each(this, function(index) { } )   });

第一个URL的预期输出为0,第二个示例URL的预期输出为3。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

您还可以在forEach()上使用urlArray循环从数组中获取每个单词,并检查它们是否存在于url中。

var url = 'www.site.com/car/somethingelse/banana/';
var urlArray = ['/car/', '/boat/', '/apple/', '/banana/'];
urlArray.forEach(function(word){
  //if word exist in url
  var wordIndex = url.indexOf(word);
  if(wordIndex !== -1){
    console.log(wordIndex);
  }
});

  

注意 includes()在IE浏览器和较旧的版本中不起作用,因此要使其在所有浏览器中都起作用,建议的方法是避免使用includes()的箭头功能,而应使用indexOf()

的普通函数

要返回数组索引:

var url = 'www.site.com/car/somethingelse/banana/';
var urlArray = ['/car/', '/boat/', '/apple/', '/banana/'];
urlArray.forEach(function(word, index){
  //if word exist in url
  if(url.indexOf(word) !== -1){
    console.log(index);
  }
});

答案 1 :(得分:0)

如果使用findIndex()字符串,则可以使用includes()遍历数组以获取索引。

这将通过{ "StatusCode": 0, "StatusMessage": "OK", "StatusDescription": "No result" } 并返回第一个匹配项的索引(如果找不到匹配项,则返回-1。)

<table *ngFor="let item of notif">
   <tr class="cell" style=" border-width: 3px" >{{item.name}}
   </tr>
</table>

答案 2 :(得分:0)

for (var i = 0; i < urlArray.length; i++) {
 if(pageURL .indexOf(urlArray[i])>-1){
   console.log(pageURL.indexOf(urlArray[i])));
 } 
}