【问题标题】:Search a string to find all the letters in JavaScript [closed]搜索字符串以查找 JavaScript 中的所有字母 [关闭]
【发布时间】:2021-01-05 14:06:22
【问题描述】:

我在文本中搜索单词“i”,但它只显示第一个“i”而没有显示其余的“i” 我想让你给我看全文 请帮帮我

const searchItem = () => {
  const source = "Lorem ipsum dolor sit amet consectetur adipisicing elit."
  const searchDate = "i";
  for (let i = 0; i < source.length; i++) {
    let res = source.search(searchDate);
    if (res > 0) {
      document.getElementById("demo").innerHTML = res;
    } else if (res < 0) {
      document.getElementById("demo").innerHTML = "No results found";
    }
  }
}
<button onclick="searchItem()">Try it</button>

<p id="demo"></p>

【问题讨论】:

  • 预期结果是什么?
  • 您的电话source.search(searchDate) 始终相同,它不依赖于i 的值。 for 循环对search 调用没有影响,它只是重复了很多次,而且每次都以完全相同的方式运行。
  • 您要返回什么?目前你返回的“i”出现次数是 6(不是 7),因为它是 0 索引
  • @iota 上面这句话中,i不止一个。我想显示所有可用i的索引,例如结果“6, 19”表示i存在的地方,显示它们的索引

标签: javascript


【解决方案1】:

您可以使用 String#indexOf 和 fromIndex 参数来连续搜索字符串。

const searchItem = () => {
  const source = "Lorem ipsum dolor sit amet consectetur adipisicing elit."
  const searchDate = "i";
  const indexes = [];
  let i, prev = 0;
  while((i = source.indexOf(searchDate, prev)) !== -1){
    indexes.push(i);
    prev = i + searchDate.length;
  }
  if (indexes.length > 0) {
    document.getElementById("demo").innerHTML = indexes;
  } else {
    document.getElementById("demo").innerHTML = "No results found";
  }
}
<button onclick="searchItem()">Try it</button>

<p id="demo"></p>

【讨论】:

    【解决方案2】:

    .search() 返回第一个匹配的索引。它不会搜索整个字符串。


    由于代码中没有使用 for 循环,您可能正在尝试使用该循环来比较字符串中的每个字符;

    const searchItem = () => {
        const source = "Lorem ipsum dolor sit amet consectetur adipisicing elit."
        const searchDate = "i";
        let res = 0;
    
        // For each character in source
        for (let i = 0; i < source.length; i++) {
            
            // If current char matches searchDate
            if (source[i] === searchDate) {
            
                // Bumb result counter
                res++;
            }
        }
    
        // After looping through all the chars, show result based on res
        if (res > 0) {
            document.getElementById("demo").innerHTML = res;
        } else if (res < 0) {
            document.getElementById("demo").innerHTML = "No results found";
        }
    }
    <button onclick="searchItem()">Try it</button>
    
    <p id="demo"></p>

    【讨论】:

      【解决方案3】:

      const searchItem = () => {
        const str = "Lorem ipsum dolor sit amet consectetur adipisicing elit."
        const res = str.split("i").length - 1;
        if (res > 0) {
          document.getElementById("demo").textContent = res;
        } else {
          document.getElementById("demo").textContent = "Invalid";
        }
      }
      <button onclick="searchItem()">Try it</button>
      
      <p id="demo"></p>

      如果您的目标是只查找单词中出现的字母,那么可以通过简单的 split 方法来完成。

      const str = "Lorem ipsum dolor sit amet consectetur adipisicing elit.";
      const result = str.split("i").length - 1;
      console.log(result);

      【讨论】:

      • 编辑了我的帖子你可以检查一下
      【解决方案4】:

      在我看来,您正在尝试计算字符串中出现的次数,应该这样做:

      var findOccurrences = () => {
         var searchQuery = document.getElementById('searchQuery').value;
         var source = document.getElementById('source').value;
      
         var regExp = new RegExp(searchQuery, 'g');
          
         var match = source.match(regExp);
         var occurrences = 0;
         
         if(match) {
          occurrences = match.length;
         }
      
         document.getElementById('demo').innerHTML = occurrences > 0 ? occurrences : "No results found";
       }
      <input id="source" value="Lorem ipsum dolor sit amet consectetur adipisicing elit."/>
      <input id="searchQuery" />
      <button onclick="findOccurrences()">Try it</button>
      <div id="demo"></div>

      【讨论】:

        【解决方案5】:
        <script>
            const searchItem = () => {
                const source = "Lorem ipsum dolor sit amet consectetur adipisicing elit."
                const searchDate = "i";
                const demo = document.getElementById("demo");
                for (let i = 0; i < source.length; i++)
                    if (source[i] === searchDate)
                        demo.innerHTML += i + ' ';
                if (demo.innerHTML === '')
                    demo.innerHTML = "No results found";
            }
        </script>
        

        【讨论】:

          【解决方案6】:

          另一种方式。 获取字符串的长度。替换所有出现并再次获取长度,不同的是你的结果。

          const searchItem = () => {
                const source = "Lorem ipsum dolor sit amet consectetur adipisicing elit."
                const searchDate = "i";
                const initialLen = source.length;
                const replacedLen = source.split(searchDate).join("").length;
                const diff = initialLen - replacedLen;
                if(diff > 0){
                  document.getElementById("demo").innerHTML = diff
                }
                else{
                  document.getElementById("demo").innerHTML = "No results found";
                }
          }
          <button onclick="searchItem()">Try it</button>
          
          <p id="demo"></p>

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-10-08
            • 1970-01-01
            • 2013-04-04
            • 2012-11-06
            • 1970-01-01
            • 1970-01-01
            • 2016-04-14
            • 1970-01-01
            相关资源
            最近更新 更多