【问题标题】:Find index number of array value based on partial string match根据部分字符串匹配查找数组值的索引号
【发布时间】:2018-09-24 08:12:34
【问题描述】:

我一直坚持这一点,因为我在混合数组 + 字符串匹配方面不是最好的。

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

不要介意 JS 或 jQuery,但无论哪种可能最有效都可以(或有效)。

当前尝试:

示例网址 = www.site.com/something/car/123

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

(要匹配的sn-p的位置并不总是在同一个路径位置)

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

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

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

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

非常感谢您的帮助!

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您还可以在urlArray 上使用forEach() 循环从数组中获取每个单词并检查它是否存在于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() 的箭头函数,而是使用带有 @ 的普通函数987654327@

    返回数组索引:

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

    【讨论】:

    • 我看到这会返回 URL 中位置的索引(如果匹配),我需要返回 urlArray 中的位置(例如上面示例中的“3”)?
    • 整洁!谢谢你,效果很好,我觉得它更容易管理。原谅我的无知,但我只想确认我一直在努力解决的问题是参数一词进入函数的位置(因为它没有在其他任何地方引用)......但它是根据通过带来的值设置的由 forEach 迭代的 urlArray。对吗?
    【解决方案2】:

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

    这将通过urlArray 并返回第一个匹配的索引(如果未找到匹配则返回-1)。

    let URL1 = "www.site.com/something/car/123"
    let URL2 = "www.site.com/something/somethingelse/banana/"
    
    let urlArray = ['/car/','/boat/','/apple/','/banana/'];
    
    let index1 = urlArray.findIndex(str => URL1.includes(str))
    let index2 = urlArray.findIndex(str => URL2.includes(str))
    
    console.log(index1, index2)

    【讨论】:

    • 我在移动端,所以我现在不能自己测试,但是如果URL3 = "www.site.com/rumouredDevices/apple/car/index.html" 会返回什么?
    【解决方案3】:
    for (var i = 0; i < urlArray.length; i++) {
     if(pageURL .indexOf(urlArray[i])>-1){
       console.log(pageURL.indexOf(urlArray[i])));
     } 
    }
    

    【讨论】:

    • 能否请您用一些 cmets 扩展您的答案,说明为什么这可能是一个解决方案?
    • 谢谢,这实际上让我在更新后到达了我需要的地方。 console.log(urlArray.indexOf(urlArray[i])); 这是引用数组索引的最佳方式吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多