0

これに似た配列がある場合:

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
4

2 に答える 2

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]

このようにして、返された配列の長さを確認することで、検索語が何回出現するかを確認できます。

于 2013-03-19T17:39:09.133 に答える
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); 

警告ですが、配列内のいずれかの文字列に複数の文字が含まれている場合、これは機能しなくなります

于 2013-03-19T17:51:50.550 に答える