[英]Actionscript 3 Count Number of Times a String Appears in an Array
如果我有一個與此類似的數組:
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
您可能會考慮返回存在搜索詞的索引數組。 例如:
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]
這樣,您可以通過檢查返回數組的長度來查看搜索詞出現了多少次。
您可以使用join
和regex
進行計數
像這樣的東西:
// 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);
不過只是警告,如果數組中的任何字符串具有多個字符,則將中斷
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.