こんにちは、なかわけです。
AS3に配列内をユニークにして返してくれる処理がなかったので、いろいろ調べながら作った。
使い方によってはユニーク化にもグループ化にもできる。
var nekoArr:Array = [
{color:'white', sex:'male', age:'1'},
{color:'black', sex:'female', age:'3'},
{color:'kiji', sex:'male', age:'2'},
{color:'white', sex:'male', age:'5'},
{color:'black', sex:'female', age:'4'}
];
function uniqueNeko(arr:Array):Array
{
var tmpObj:Object = new Object();
var uniqueArr:Array = new Array();
for (var i:uint = 0; i < arr.length; i++) {
var property:String = arr[i]['color'] + arr[i]['sex'];
if (!(property in tmpObj)) {
tmpObj[property] = true;
uniqueArr.push(arr[i]);
}
}
return uniqueArr;
}
uniqueNeko(nekoArr);
[/as3]
色とオスメスでグループ化したいとき(年齢は無視)、colorとsexの値を結合して文字列にしtmpObjのプロパティにするところがミソ。
tmpObj[property]にtrueを入れているけど、trueである必要はなく空文字でもなんでもいいです。プロパティを追加することに意味があるので。
たぶん、これでOKじゃないかなー。おかしかったらコメントください。