我想要做的事情应该非常简单,我不确定为什么我的代码不起作用。我正在创建一个函数,它应该返回指定字符的所有索引的数组。
var str = "audiueaaudliusa";
str = str.split("");
var emptyArr = [];
function abCheck(str) {
for (i = 0; i < str.length; i++) {
if(str[i] === "a") {
emptyArr.push(str.indexOf(str[i]));
}
}
return emptyArr;
}
在上面的例子中,它返回一个[0,0,0,0]的数组。我希望代码返回一个[0,6,7,14]的数组。
请提供解决方案,如有可能,请说明这里出了什么问题。
答案 0 :(得分:2)
问题是行emptyArr.push(str.indexOf(str[i]));
并且是一个问题,因为String.indexOf()
会返回第一个匹配的字符实例的索引。
正如评论中所述,对此问题的纠正只是使用:
emptyArr.push(i);
将当前索引(由i
表示)推送到数组中:
var str = "audiueaaudliusa";
var emptyArr = [];
function abCheck(str) {
// in the for loop I've made a couple of small changes:
// - made 'i' and 'len' local variables,
// - used 'len' in order that the 'str.length' wouldn't
// need to be reevaluated on each iteration (it's a tiny,
// tiny optimisation though):
for (var i = 0, len = str.length; i < len; i++) {
if (str[i] === "a") {
emptyArr.push(i);
}
}
return emptyArr;
}
console.log(abCheck(str)); // [0, 6, 7, 14]
参考文献: