0

以下のように、配列からランダムな要素を取得できます

var list:Array=[1,2,3,4,5];
var randomElement:int = list[ int(Math.random()*list.length) ] ;

しかし、オブジェクトからランダムな要素を取得するにはどうすればよいでしょうか?

var list:Object={a:0,b:1,c:1};
var randomElement:int = //from the list..how??

ありがとう

4

3 に答える 3

2

たとえば、キーの一時的な配列を作成できます。

    var list:Object={a:0,b:1,c:2};
    var keys:Array = [];
    for(var key:String in list)
        keys[keys.length] = key;

    var randomElement:int = list[keys[ int(Math.random()*keys.length) ]];

オブジェクトのランダムなプロパティが必要になるたびに新しい配列を作成するのは非常にコストがかかりますが、それを取得するための他のオプションは見当たりません。

于 2013-09-17T08:27:10.997 に答える
1

もう 1 つの選択肢 (この特殊なケースの場合):

 var list:Object={ a:0,b:1,c:2 };
 var max_i:Number = "c".charCodeAt( 0 );
 var min_i:Number = "a".charCodeAt( 0 );
 var range:Number = max_i - min_i ;
 var rand_i:Number = Math.floor( Math.random() * ( range + 1 ) );

 var prop:String = String.fromCharCode( min_i + rand_i );
 var randomElement:int = list[ prop ];

 trace( prop , randomElement );
于 2013-09-17T08:39:03.247 に答える