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

问题描述 投票:1回答:2

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

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

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

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

javascript string char
2个回答
0
投票

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

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

解决任何字符串。

var string = "123456789017899199999100001",
    positions = [],
    index = -1,
    search = "99";
    
while ((index = string.indexOf(search, index + search.length)) !== -1) {
    positions.push(index);
}

console.log(positions);
console.log(positions.length);
.as-console-wrapper { max-height: 100% !important; top: 0; }

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}

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

© www.soinside.com 2019 - 2024. All rights reserved.