javascript - 如何返回字符串中子串的出现频率?

标签 javascript arrays string substring find-occurrences

function occurrence(string,substring) {
    var counter = 0;
    var sub = substring.toLowerCase();
    var str = string.toLowerCase(); 
    var array = []
    var ans;

    for (var i = 0; i < str.length; i++) {
        if (str.indexOf(sub) != -1) {
            array[counter] = str.indexOf(sub);
            counter += 1;
            ans = array.length
            alert(array); //tester to see inside array
        } else {
            ans = 0;
        }
    }
    return ans
}

alert(occurrence("Party arty art","art")) //tester to see function in action

在上面显示的测试器中,它应该打印出 3。但是使用我的代码,它会打印出字符串的长度。我试图将“art”在字符串中出现的位置的索引存储在数组中,以便我可以打印出该数组以给出出现的次数。然而,当我警告循环内的数组时,它只打印出“1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1”。

注意:我尝试使用尽可能少的内置函数来编写此代码。我是 javascript 新手,因此非常感谢一些指导。

我也尝试在不使用 .match() 的情况下编写此内容

最佳答案

像这样的事情怎么样?

function occurrence(string, substring) {
    var counter = 0;
    var sub = substring.toLowerCase();
    var str = string.toLowerCase(); 
    var array = [];
    var index = -1;

    do {
        index = str.indexOf(sub, index + 1);
        if (index != -1) {
            array[counter++] = index;
            i = index;
        }
    } while (index != -1);

    return counter; // or return array; if you want the indexes
}

关于javascript - 如何返回字符串中子串的出现频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19822749/

相关文章:

javascript - 根据单击的元素对不同元素执行相同的功能 - polymer

php - jquery将变量添加到$.get url参数

c# - JQuery 将值设置为自定义服务器控件

java - 如何合并 2 个数组?

javascript - KnockoutJS - 无法从纯 JSON 数组映射模型

c++ - 尝试动态增长静态数组 C++

php - str_ireplace 与 str_replace 一样工作

json - 如何在 dart flutter 中将 json 字符串转换为 json 对象?

python - 从旧样式自动转换高级字符串格式化程序

javascript - 对数组进行排序以对匹配的元素进行分组,但保持原始顺序