【问题标题】:indexOf always gives start index of first occurenceindexOf 总是给出第一次出现的起始索引
【发布时间】:2020-10-15 13:11:40
【问题描述】:

我希望每个选定的单词或子字符串都有一个唯一的开始和结束索引,但使用 indexOf。因为 indexOf 总是给出重复单词的第一次出现。有没有办法只使用 indexOf 获得唯一索引?

让我们说

var str = "敏捷的棕色狐狸跳过懒狗。如果狗叫,它真的很懒吗?"

因此,如果我选择“狗”,那么第一只狗的起始索引将为 (40),而第二只狗的起始索引为 (52)。但仅使用 indexOf。

您的帮助将不胜感激。

谢谢

【问题讨论】:

标签: javascript


【解决方案1】:

试试这个。

var string = "The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?",
needle = 'dog',
var splitOnFound = string.split(needle).map(function (item)
{
    return this.pos += item.length + needle.length
}, {pos: -needle.length}).slice(0, -1);
console.log(splitOnFound);

【讨论】:

  • 嘿,谢谢。我想通过 getSelection 使用它,我将如何在 getSelection 中使用它?
  • 当我选择一只狗时,它会给我一个唯一的索引。谢谢
【解决方案2】:

如果要求使用indexOf,以下应该可以工作。

const str = 'The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?';

const findIndexesWithIndexOf = (str, subStr) => {
  let indices = [];
  if (str.length && subStr.length) {
    let lastIndex = 0;
    let remainingStr = str;

    do {
      lastIndex = remainingStr.indexOf(subStr); // Use of indexOf

      if (lastIndex >= 0) {
        remainingStr = remainingStr.slice(lastIndex + subStr.length);
        indices.push((indices[indices.length - 1] + subStr.length || 0) + lastIndex);
      }
    } while (remainingStr.length > subStr.length && lastIndex >= 0);
  }

  return indices;
};

console.log(findIndexesWithIndexOf(str, 'dog'));

【讨论】:

  • 好吧好吧我猜对了。谢谢还有一个问题,我可以将这些索引保存在数据库中以供下次匹配吗?它会起作用吗?
  • 嘿,它给了所有的东西我已经根据用户选择的单词或子字符串来做到这一点。谢谢
  • 它给了我所有我想要的事件,只需要使用 getSelection 选择哪一个。使用 indexOf
  • 函数 findIndexesWithIndexOf(str,subStr){ 让索引 = []; if (str.length && subStr.length) { 让 lastIndex = 0;让剩余的Str = str; // 做 { lastIndex = remainingStr.indexOf(subStr); // 使用 indexOf if (lastIndex >= 0) { remainingStr = remainingStr.slice(lastIndex + subStr.length);指数 = (indices[indices.length - 1] + subStr.length || 0) + lastIndex; } // } while (remainingStr.length > subStr.length && lastIndex >= 0); } 返回索引; };
  • 第一次出现时再次对我进行编码。我想要选定的文本而不是所有出现。请帮忙
猜你喜欢
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 2014-07-15
  • 2010-12-19
相关资源
最近更新 更多