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()
的情况下写这个答案 0 :(得分: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
}
答案 1 :(得分:0)
您是否考虑过进行正则表达式匹配?在这种情况下,这可能是最好的。
你走了: (PS,您可能希望在命名变量时避免使用内置名称,如“string”和“integer”)
你需要创建一个函数来从字符串中转义任何正则表达式字符:...然后使用该函数。
function occurrence(str, substr) {
var escaped = escapeFn(substr)
var regex = new RegExp(escaped,"g")
return str.match(regex).length
}
编辑:对不起,我一定错过了你说你不想使用匹配的底部。
答案 2 :(得分:0)
可能想要使用match()
:
在字符串中搜索“ain”:
var str = "The rain in SPAIN stays mainly in the plain";
var res = str.match(/ain/g);
res的结果将是一个值为:
的数组AIN,AlN,AlN
因此,对于您的示例,此类内容可能有效:
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;
}