2015-09-26 53 views
0

我想要做的應該很簡單,我不知道爲什麼我的代碼不工作。我正在創建一個應該返回指定字符的所有索引數組的函數。返回某個字符的所有索引的數組?

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]的數組。

請提供一個解決方案,如果可能的話解釋這裏出了什麼問題。

+3

'emptyArr.push(i);' – RainingChain

+0

不會使'i'全局。 'for(var i = 0; i

回答

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]

參考文獻:

+0

謝謝!很簡單... –

相關問題