方法
/*
* 根据某个字段实现对json数组的排序
* @param array 要排序的json数组对象
* @param field 排序字段(此参数必须为字符串)
* @param reverse 是否倒序(默认为false)
* @return array 返回排序后的json数组
*/
function jsonSort(array, field, reverse) {
// 数组长度小于2 或 没有指定排序字段 或 不是json格式数据
if (array.length < 2 || !field || typeof array[0] !== "object") return array;
// 数字类型排序
if (typeof array[0][field] === "number") {
array.sort(function (x, y) { return x[field] - y[field] });
}
// 字符串类型排序
if (typeof array[0][field] === "string") {
array.sort(function (x, y) { return x[field].localeCompare(y[field]) });
}
// 判断是否需要倒序
if (reverse) {
array.reverse();
}
return array;
}
知識ポイント
localeCompare()
-
定義と使用法
2 つの文字列をロケール固有の順序で比較します。 -
文法
stringObject.localeCompare(target)
-
パラメータ
-
戻り値
比較の結果を示す数値。localeCompare() は、stringObject がターゲットより小さい場合、0 より小さい数値を返します。stringObject がターゲットより大きい場合、このメソッドは 0 より大きい数値を返します。2 つの文字列が等しい場合、またはローカル照合に従って区別できない場合、このメソッドは 0 を返します。備考
< 演算子と > 演算子を文字列に適用すると、ローカル照合順序に関係なく、文字の Unicode エンコードのみを使用して文字列が比較されます。このようにして生成された順序は、必ずしも正しいとは限りません。たとえば、スペイン語では、文字「ch」は通常、文字「c」と「d」の間に出現する文字として順序付けされます。localeCompare() メソッドは、デフォルトのローカル照合順序を考慮して文字列を比較する方法を提供します。ECMAscript 標準では、ロケール固有の比較操作の実行方法は指定されておらず、関数が基礎となるオペレーティング システムによって提供される照合順序を使用することのみが指定されています。
-
選別()
-
定義と使用法
sort() メソッドは、配列の要素をソートするために使用されます。 -
文法
arrayObject.sort(sortby)
-
パラメータ
パラメータ | 説明する |
---|---|
並べ替え | オプション。ソート順を指定します。関数である必要があります。 |
- 戻り値
- 配列への参照。配列は元の配列に基づいてソートされ、コピーは作成されないことに注意してください。
- 説明する
このメソッドがパラメータなしで呼び出された場合、配列内の要素はアルファベット順、より正確には文字エンコーディングの順に並べ替えられます。これを行うには、まず配列の要素を比較のために (必要に応じて) 文字列に変換する必要があります。
他の基準で並べ替える場合は、2 つの値を比較し、2 つの値の相対的な順序を示す数値を返す比較関数を提供する必要があります。比較関数には 2 つのパラメータ a と b が必要で、その戻り値は次のとおりです。
- a が b より小さい場合は 0 より小さい値を返し、ソートされた配列では a が b より前に出現する必要があります。
- a が b と等しい場合は 0 を返します。
- a が b より大きい場合、0 より大きい値を返します。
逆行する()
-
定義と使用法
reverse() メソッドは、配列内の要素の順序を逆にするために使用されます。 -
文法
arrayObject.reverse()
-
ヒントと注意事項
注: このメソッドは元の配列を変更し、新しい配列を作成しません。
例
初期データ
並べ替えた後