2013-03-19 21 views
0

如果我有類似這樣的數組:的ActionScript時報3計數出現對一個字符串數組

var myArray:Array = new Array("a","b","c","d","e","f","g","b"); 

如何搜索它來確定的值的次數出現在它和什麼位置?我發現下面的代碼很近,但它只會返回第一個匹配項。

function findIndexInArray(value:Object, arr:Array):Number { 
    for (var i:uint=0; i < arr.length; i++) { 
     if (arr[i]==value) { 
      return i; 
     } 
    } 
    return NaN; 
} 

var myArray:Array = new Array("a","b","c","d","e","f","g","b"); 
trace(findIndexInArray("b", myArray)); 

// OUTPUT 
// 1 

回答

1

您可能會考慮在搜索詞存在的位置返回一系列索引。例如:

var list:Array = ['a', 'b', 'b', 'c', 'd', 'e', 'f']; 

function find(obj:Object, list:Array):Array 
{ 
    var result:Array = []; 
    for(var i:int = 0; i < list.length; i++) 
    { 
     if(list[i] = obj) 
     { 
      result.push(i); 
     } 
    } 
    return result; 
} 

var search:Array = find('b', list); 
trace('b is found: ' + search.length + ' times at indices: ' + search); 
// -- 'b is found: 2 times at indices [1, 2] 

通過這種方式,您可以通過檢查返回數組的長度來查看搜索項的出現次數。

0

你可以使用joinregex做計數

是這樣的:

// convert to one long string 
var str:String = myArray.join(""); 

// regex find the letter and count result 
var count:int = str.match(new RegExp(letter,"a")).length; 

沒有測試過,所以代碼可能需要一個調整,但是這應該比循環快通過陣列。


更新

// convert to one long string 
var str:String = myArray.join(""); 

var pos:Array = new Array();  
var n:int = -1;  

// loop through array and find all indexes 
while ((n = str.indexOf(searchFor, n+1)) != -1) pos.push(n); 

雖然只是一個警告,這將打破,如果陣列中的任何字符串中有一個以上的字符

+0

若本回報,其中在列表中的對象時,或者只是發生次數? – JeremyFromEarth 2013-03-19 18:05:17

+0

oops,就像我錯過了位置部分,你仍然可以使用連接和索引,更新文章 – Daniel 2013-03-20 15:54:01

相關問題