如何在字符串(Javascript)中出现字符时如何找到索引?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在字符串(Javascript)中出现字符时如何找到索引?相关的知识,希望对你有一定的参考价值。

嗨我正在尝试识别特定字符的索引,因为它每次都位于一个字符串中,并提供检测它的次数。

我想到的一种方法是基本上使用(str.replace(/[^char]/g, "").length)查找它在字符串中的次数,然后使用str.lastIndexOf("char")并在从该索引向前删除字符后再创建一个新字符串,直到我找不到它为止。

但是我不认为这是最有效的方法,所以如果你有更好的方法,请告诉我?

让我们说:var str = "123456789017899199999100001",我们需要每个1的索引以及在字符串中找到它的次数。

答案

您可以为值及其索引获取哈希表。然后将数组的长度作为计数。

var string = "123456789017899199999100001",
    positions = Object.create(null);
    
[...string].forEach((v, i) => (positions[v] = positions[v] || []).push(i));

console.log(positions[1]);
console.log(positions[1].length);
console.log(positions);
.as-console-wrapper { max-height: 100% !important; top: 0; }
另一答案

使用regexp进行此类任务是过度的,你是对的,它可以通过线性遍历字符串更简单的方式完成:

function count(str, char) {
    var rval = {indices:[], count:0};
    for(var i=0; i<str.length; i++) {
        if (str[i] === char) {
            rval.indices.push(i);
            rval.count++;
        }
    }
    return rval;
}

那么对于你的字符串,它会产生:

count(str,'1') // {indices:[0,10,15,21,26],count:5}

你也可以简单地返回索引数组,其长度是总出现次数

以上是关于如何在字符串(Javascript)中出现字符时如何找到索引?的主要内容,如果未能解决你的问题,请参考以下文章

处理c字符串时如何用当前输入替换用户的第一个输入

javascript 如何在JavaScript中替换所有出现的字符串?

如何在 JavaScript 中找到一个字符串在另一个字符串中所有出现的索引?

如何在字符串(Javascript)中出现字符时如何找到索引?

如何使用javascript替换字符串中最后出现的字符

如何在JavaScript中查找一个字符串中所有出现的索引?