Arayの並べ替えの詳細
3028 ワード
並べ替えの必要性:
データセットを手に入れたら、おそらくArayタイプで保存されます.私たちは使用中、データ内の要素を並べ替える必要があります.ページに必要な順序を表示させたり、必要な順序にデータを並べさせたりします.
並べ替え方法:
説明:この関数は配列の順序を反転します.
説明:この関数はデフォルトの昇順で配列されています.つまり最小値は前にあり、最大値は後にあります.並べ替えロジックプロセス:並べ替えを実現するために、sort() メソッドは、各配列項目のtoString()を呼び出します. 変換方法は、次に得られた文字列を比較して、どのように並べ替えられているかを決定します.配列の各項目が数値であっても、sort() 方法の比較も文字列です.
sort()はパラメータを持ってもいいです.パラメータは関数です.このパラメータは比較関数です.
比較関数は2つのパラメータを受信し、最初のパラメータが2番目の前にあるべきなら負の値を返し、2つのパラメータが等しいなら0を返し、最初のパラメータが2番目の後にあるべきなら正の値を返します.以下は簡単な比較関数です.
原理が同じである
ここでもう一つの問題があります.配列がvar arr=[name:"zlw"であれば、age:"24","name:"wlz"であれば、age:"5"";;文字列の比較になります.エラーが発生します.
sort()の下にURLを実現します.https://github.com/v8/v8/blob/ad82a40509c5b5b4680d4299c8f08d6c6d31af3c/src/js/array.js 710行目
説明:異なるエンジンコードの下の実装原理が異なります.V 8エンジンを例にV 8 エンジン 関数は二つの並べ替えInsertionSortのみを与えた. QuickSortと10未満の配列はInsertionSortを使い、10の大きい配列よりQuickSortを使います.
データセットを手に入れたら、おそらくArayタイプで保存されます.私たちは使用中、データ内の要素を並べ替える必要があります.ページに必要な順序を表示させたり、必要な順序にデータを並べさせたりします.
並べ替え方法:
1. reverse()
2. sort()
逆転()説明:この関数は配列の順序を反転します.
var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values); //[5,4,3,2,1]
sort()説明:この関数はデフォルトの昇順で配列されています.つまり最小値は前にあり、最大値は後にあります.並べ替えロジックプロセス:並べ替えを実現するために、sort() メソッドは、各配列項目のtoString()を呼び出します. 変換方法は、次に得られた文字列を比較して、どのように並べ替えられているかを決定します.配列の各項目が数値であっても、sort() 方法の比較も文字列です.
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //[0,1,10,15,5]
10は5の前に位置していますが、並べ替えの時は文字列で並べ替えられていますので、ASCII文字順に元素を並べ替えます.文字列を比較する時は順番に大きさを比較します.(もちろん、これは私たちが欲しいものではない)sort()はパラメータを持ってもいいです.パラメータは関数です.このパラメータは比較関数です.
比較関数は2つのパラメータを受信し、最初のパラメータが2番目の前にあるべきなら負の値を返し、2つのパラメータが等しいなら0を返し、最初のパラメータが2番目の後にあるべきなら正の値を返します.以下は簡単な比較関数です.
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
これで所期の結果が見られます.var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); //[0,1,5,10,15]
ソトを使って配列オブジェクトの並べ替えを行います.配列項目が対象の場合、配列項目の属性に従って配列を並べ替える必要があります.原理が同じである
var arr = [{name: "zlw", age: 24}, {name: "wlz", age: 25}];
var compare = function (obj1, obj2) {
var val1 = obj1.name;
var val2 = obj2.name;
if (val1 < val2) {
return -1;
} else if (val1 > val2) {
return 1;
} else {
return 0;
}
}
console.log(arr.sort(compare));
出力結果は[Object { name="wlz", age=25}, Object {name="zlw", age=24}]
行列はもうnameによって見られます. 属性を並べ替えました.もし私がageに従って並べばいいです.var compare = function (prop) {
return function (obj1, obj2) {
var val1 = obj1[prop];
var val2 = obj2[prop];
if (val1 < val2) {
return -1;
} else if (val1 > val2) {
return 1;
} else {
return 0;
}
}
}
メッセージに従いたいなら 並べ替えを行います.arr.sort(compare(「age」) いいですここでもう一つの問題があります.配列がvar arr=[name:"zlw"であれば、age:"24","name:"wlz"であれば、age:"5"";;文字列の比較になります.エラーが発生します.
var compare = function (prop) {
return function (obj1, obj2) {
var val1 = obj1[prop];
var val2 = obj2[prop];
if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
val1 = Number(val1);
val2 = Number(val2);
}
if (val1 < val2) {
return -1;
} else if (val1 > val2) {
return 1;
} else {
return 0;
}
}
}
拡張内容sort()の下にURLを実現します.https://github.com/v8/v8/blob/ad82a40509c5b5b4680d4299c8f08d6c6d31af3c/src/js/array.js 710行目
説明:異なるエンジンコードの下の実装原理が異なります.V 8エンジンを例にV 8 エンジン 関数は二つの並べ替えInsertionSortのみを与えた. QuickSortと10未満の配列はInsertionSortを使い、10の大きい配列よりQuickSortを使います.