【问题标题】:What is the fastest way to find which of the substrings is present in a string in javascript?在javascript中查找字符串中存在哪些子字符串的最快方法是什么?
【发布时间】:2014-01-26 08:57:53
【问题描述】:

好的,可能是这个问题很奇怪。 让我解释一个手头的案例。我在一个数组中有 5 个名字 例如:

var namesArray=['John','Henry','Smith','James','Carl'];

我还有一个来自其他操作的字符串,其中包含其中一个带有称呼的字符串,比如Hello JohnMr.John(请注意,第二个没有空格)。

var returnedName='Howdy,James!';

我所知道的是,返回的字符串将只包含提到的namesArray 中的一个字符串,并且我不知道该字符串在returnedName 中可能包含的周围字符。

知道namesArray 中的哪些字符串是returnedName 的子字符串的最快方法是什么?我期待一个函数返回namesArray 中字符串的索引,这是returnedName 的子字符串。这样的内置功能是否存在?如果没有,最快的方法是什么(我有一个大约 10 万个名字的 namesArray)?

【问题讨论】:

  • 这会回答你的问题 - stackoverflow.com/questions/5296268/…
  • 如果namesArray 包含Carl 并且returnedName 包含Carlito - 你将如何处理?
  • 我仍然希望返回 Carl 的索引,因为它是一个有效的子字符串。在我的情况下,一个有效的子字符串是可能的,名称只是举例的一种方式。

标签: javascript arrays string substring


【解决方案1】:

这似乎更像是一个搜索问题。显然,在搜索时,您确实需要进行比较以匹配您的搜索词。对于这个w.r.t。你的问题,在 JavaScript 中你可以想到 RegexindexOf。但是为了使其更快以获得更好的时间复杂度,您必须考虑一些比数组上的线性迭代更好的搜索算法(可能是二进制搜索)。

【讨论】:

    【解决方案2】:
    【解决方案3】:

    有多种方法可以检查字符串是否包含另一个子字符串。

    var str = "Hello world, welcome to Javascript Coding.";
    var n = str.indexOf("welcome");
    
    //Returns Index no 13
    
    var s = "foo";
    console.log(s.indexOf("oo") > -1)
    
    //returns true
    

    你也可以使用 string.includes 方法来达到同样的效果

    var str = "Hello World, Welcome to Javascript Coding";
    
    console.log(str.includes("Welcome to"));    // true
    console.log(str.includes("Javascript")); // true
    console.log(str.includes("To be", 1)); // false  
    

    参考文章How to check if string contains another substring

    【讨论】:

      【解决方案4】:

      您必须遍历数组,检查字符串是否包含数组值,如果包含,则中断循环(因为只能有一个)并设置一个变量:

      var containsName = '';
      
      for (var i=0; i<namesArray.length; i++) {
          if ( returnedName.indexOf( namesArray[i] ) != -1 ) {
              containsName = namesArray[i];
              break;
          }
      }
      
      alert( containsName );
      

      FIDDLE

      【讨论】:

        猜你喜欢
        • 2015-01-14
        • 2013-07-06
        • 2021-12-28
        • 1970-01-01
        • 2016-10-05
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        相关资源
        最近更新 更多