1
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。但是使用我的代码,它会打印出字符串的长度。我正在尝试将“艺术”出现在字符串中的位置的索引存储在数组中,以便我可以打印出数组以给出出现次数。但是,当我警告循环内的数组时,它只会打印出“1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1”。

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

我也试图在没有 .match() 的情况下写这个

4

3 回答 3

1

这样的事情呢?

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
}
于 2013-11-06T21:07:43.657 回答
0

您是否考虑过进行正则表达式匹配?在这种情况下,这可能是最好的事情。

给你:(PS,在命名变量时,您可能希望避免使用“字符串”和“整数”等内置名称)

您需要创建一个函数来转义字符串中的任何正则表达式字符:...然后使用该函数。

function occurrence(str, substr) {
  var escaped = escapeFn(substr)
  var regex = new RegExp(escaped,"g")

  return str.match(regex).length

}

编辑:对不起,我一定错过了你说你不想使用匹配的底部。

于 2013-11-06T21:06:49.757 回答
0

可能要使用match()

在字符串中搜索“ain”:

var str = "The rain in SPAIN stays mainly in the plain"; 
var res = str.match(/ain/g);

res 的结果将是一个包含以下值的数组:

恩恩恩恩恩恩恩恩

因此,对于您的示例,这样的事情可能会起作用:

function occurrence(string, substring) {
    var counter = 0;
    var sub = new RegExp(escapeRegexStringCharactersFunction(substring.toLowerCase()),"g");
    var str = string.toLowerCase(); 
    var array = []

    array = str.match(sub);
    counter = array.length;

    return counter;
}

更简单:

function occurrence(string, substring) { 
    var array = []
    var sub = new RegExp(escapeRegexStringCharactersFunction(substring),"gi");
    array = string.match(sub);
    return array.length;
}
于 2013-11-06T21:07:19.287 回答