sortOn (Array.sortOn メソッド)

public sortOn(fieldName: Object , [options: Object ]) : Array

配列内のフィールド (複数のフィールドも可能) に基づいて、配列内のエレメントをソートします。配列は、次に示す特性を備えている必要があります。

複数の fieldName パラメータを渡す場合、最初のフィールドが第 1 ソートフィールド、2 番目のフィールドが第 2 ソートフィールドを表します (3 番目以降も同様)。ソートは Unicode 値に基づいて実行されます (ASCII は Unicode のサブセットです)。fieldName パラメータで指定されたフィールドが、比較対象のいずれのエレメントにも含まれていない場合、そのフィールドは undefined と見なされます。ソート済みの配列では、エレメントが連続的かつランダムに格納されます。

デフォルトでは、Array.sortOn() は次のように動作します。

Flash Player 7 では options パラメータが追加されました。このパラメータを使用すると、デフォルトのソート動作をオーバーライドすることができます。単純な配列 (たとえば 1 つのフィールドだけを持つ配列) をソートする場合や、options パラメータによってサポートされないソート順序を指定する場合には、Array.sort() を使用します。

複数のフラグを渡すには、ビット単位の論理和 OR (|) 演算子で区切ります。

my_array.sortOn(someFieldName, Array.DESCENDING | Array.NUMERIC);

Flash Player 8 では、複数のフィールドでソートを行う場合に、各フィールドに対して異なるソートオプションを指定する機能が追加されました。Flash Player 8 では、options パラメータはさまざまなソートオプションを受け入れます。各ソートオプションは fieldName パラメータのソートフィールドに対応します。次の例では、第 1 ソートフィールド a を降順で、第 2 ソートフィールド b を数値ソートで、第 3 ソートフィールド c を大文字と小文字を区別しないでソートします。

Array.sortOn (["a", "b", "c"], [Array.DESCENDING, Array.NUMERIC, Array.CASEINSENSITIVE]);

メモ : fieldName 配列と options 配列のエレメントは同数になっている必要があります。同数でない場合、options 配列は無視されます。また、Array.UNIQUESORT オプションと Array.RETURNINDEXEDARRAY オプションは、配列内の最初のエレメントとしてのみ使用できます。そうしない場合、これらのオプションは無視されます。

対応バージョン : ActionScript 1.0、Flash Player 6 - options パラメータが Flash Player 7 で追加されました。複数のソートフィールドで各種 options パラメータを使用する機能が Flash Player 8 で追加されました。

パラメータ

fieldName:Object - ソート値として使用するフィールドを指定するストリング、または最初のエレメントが第 1 ソートフィールド、2 番目が第 2 ソートフィールド (3 番目以降も同様) を表す配列。

options:Object (オプション) - ソートビヘイビアを変更する数値または定義済み定数の名前。ビット単位の論理和 OR (|) 演算子によって区切ります。options パラメータには次の値を指定できます。

数値形式 (2) ではなく、ストリング形式のフラグ (DESCENDING など) を使用すると、コードヒントが有効になります。

戻り値

Array - 戻り値は、パラメータを渡したかどうかにより異なります。

次の例では、新しい配列を作成し、その配列を name フィールドと city フィールドに基づいてソートします。最初のソートでは、第 1 ソート値に name を、第 2 ソート値に city を使用します。2 番目のソートでは、第 1 ソート値に city を、第 2 ソート値に name を使用します。

var rec_array:Array = new Array();
rec_array.push({name: "john", city: "omaha", zip: 68144});
rec_array.push({name: "john", city: "kansas city", zip: 72345});
rec_array.push({name: "bob", city: "omaha", zip: 94010});
for(i=0; i<rec_array.length; i++){
    trace(rec_array[i].name + ", " + rec_array[i].city);
}
// Results:
// john, omaha
// john, kansas city
// bob, omaha

rec_array.sortOn(["name", "city"]);
for(i=0; i<rec_array.length; i++){
    trace(rec_array[i].name + ", " + rec_array[i].city);
}
// Results:
// bob, omaha
// john, kansas city
// john, omaha

rec_array.sortOn(["city", "name" ]);
for(i=0; i<rec_array.length; i++){
    trace(rec_array[i].name + ", " + rec_array[i].city);
}
// Results:
// john, kansas city
// bob, omaha
// john, omaha

次の例では、オブジェクト配列を使用して、options パラメータの使用法を示します。

var my_array:Array = new Array();
my_array.push({password: "Bob", age:29});
my_array.push({password: "abcd", age:3});
my_array.push({password: "barb", age:35});
my_array.push({password: "catchy", age:4});

password フィールドに対してデフォルトのソートを実行すると、次の結果が生成されます。

my_array.sortOn("password");
// Bob
// abcd
// barb
// catchy

password フィールドに対して大文字と小文字を区別しないソートを実行すると、次の結果が生成されます。

my_array.sortOn("password", Array.CASEINSENSITIVE);
// abcd
// barb
// Bob
// catchy

password フィールドに対して、大文字と小文字を区別しない降順ソートを実行すると、次の結果が生成されます。

my_array.sortOn("password", Array.CASEINSENSITIVE | Array.DESCENDING);
// catchy
// Bob
// barb
// abcd

age フィールドに対してデフォルトのソートを実行すると、次の結果が生成されます。

my_array.sortOn("age");
// 29
// 3
// 35
// 4

age フィールドに対して数値ソートを実行すると、次の結果が生成されます。

my_array.sortOn("age", Array.NUMERIC);
// my_array[0].age = 3
// my_array[1].age = 4
// my_array[2].age = 29
// my_array[3].age = 35

age フィールドに対して数値の降順ソートを実行すると、次の結果が生成されます。

my_array.sortOn("age", Array.DESCENDING | Array.NUMERIC);
// my_array[0].age = 35
// my_array[1].age = 29
// my_array[2].age = 4
// my_array[3].age = 3

Array.RETURNEDINDEXARRAY ソートオプションを使用する場合は、別の配列に戻り値を代入する必要があります。元の配列は変更されません。

var indexArray:Array = my_array.sortOn("age", Array.RETURNINDEXEDARRAY);

関連項目

| ビット単位の論理和 (OR) 演算子, sort (Array.sort メソッド)


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00001367.html