返回某个字符的所有索引的数组?

时间:2015-09-26 22:01:18

标签: javascript

我想要做的事情应该非常简单,我不确定为什么我的代码不起作用。我正在创建一个函数,它应该返回指定字符的所有索引的数组。

    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]的数组。

请提供解决方案,如有可能,请说明这里出了什么问题。

1 个答案:

答案 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]

参考文献: