sortOn (Array.sortOn メソッド)

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

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

  • インデックス付き配列を対象とします。結合配列は対象外です。

  • 配列の各エレメントは、プロパティがあるオブジェクトを保持するものとします。

  • すべてのオブジェクトには共通のプロパティが少なくとも 1 つあるものとします。このようなプロパティを フィールド といいます。

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

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

  • ソートでは大文字と小文字が区別されます。Za よりも先になります。

  • 昇順にソートされます。ab よりも先になります。

  • 配列はソート順を反映するように変更されます。同じソートフィールドを持つ複数のエレメントは、ソート済みの配列の中で連続的かつランダムに格納されます。

  • 数値フィールドは、ストリングとしてソートされます。たとえば、"1" は "9" よりも小さいストリング値であるため、100 は 99 よりも先になります。

options パラメータを使用して、デフォルトのソート動作を上書きすることができます。たとえば、1 つのフィールドしかない単純な配列をソートする場合、または options パラメータでサポートされていないソート順序を指定する場合は、Array.sort() を使用します。

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

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

利用状況

Flash Lite 2.0

パラメータ

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

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

  • Array.CASEINSENSITIVE または 1

  • Array.DESCENDING または 2

  • Array.UNIQUESORT または 4

  • Array.RETURNINDEXEDARRAY または 8

  • Array.NUMERIC または 16

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

戻り値

Array - 戻り値は、次に示すように、指定されたパラメータによって異なります。

  • options パラメータに値 4 または Array.UNIQUESORT を指定し、ソート対象の複数のエレメントにまったく同じソートフィールドがある場合は 0 が返されます。配列は変更されません。

  • options パラメータに値 8 または Array.RETURNINDEXEDARRAY を指定すると、ソート結果を反映した配列が返されます。配列は変更されません。

  • それ以外の場合、値は返されません。ソート順を反映するように配列が変更されます。

次の例では、新しい配列を作成し、その配列を 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);