私は最近、JS ソートの問題に取り組んでいます。データベースのソートは大量のリソースを消費するため、ソートをクライアントに転送できれば、サーバーのメモリ消費を大幅に削減できます。クライアントに関してはjsの他にasもありますが、残念ながら私はasが苦手なので勉強するにはjsしか選択できません。 。 。テストした結果、js 組み込みメソッドの sort は非常に効率的であることがわかりました
js にはデフォルトでsort関数が提供されていることはわかっていますが、デフォルトではこの関数は配列の内容をASCIIコードに従って昇順にソートします。2次元配列をソートしたい場合はどうすればよいでしょうか。 PHPでは呼び出すことができるmulti_sort関数がありますが、jsにはそのような関数はないようですが、jsのsort関数は実際には2次元でソートするための比較関数を定義するパラメータも提供しているため、問題はありません。配列。
1. 値で並べ替えます
次の配列があるとします。
var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];
各部分配列の最初の列で並べ替えたい場合はどうすればよいでしょうか。
arr.sort(function(x, y){
return x[0] – y[0];
});
ここでの比較関数の役割は何ですか?実際、配列は配列要素を x と y に順番にコピーします。たとえば、最初に arr[0] を x に割り当て、次に arr[1] を y に割り当てます。次に、x[0] – y[0] を使用します。返された値が 0 より大きい場合、配列内の y の後に x を置きます。0 より小さい場合は、x を y の前に置きます。 、最初のものがソートされたら、配列全体がソートされるまで次の 2 つのソートに進みます。これはデフォルトの昇順比較関数です。降順で並べ替える場合は、y[0] – x[0] を返すように比較メソッドを変更するだけです。ここで、x[0] は最初の列による並べ替えを意味します。他の列による並べ替えもここで実行できます。ここでソートすると、デフォルトでは arr の配列構造が変更されるため、ソート後の arr は 1 列目の昇順の配列になります。
2. 文字列で並べ替える
文字列で並べ替える場合は、js が提供する localeCompare メソッドを使用できます。
localeCompare 関数: ロケール固有の To を使用します。 2 つの文字列を順番に比較します。
localeCompare メソッドの使用規則は stringObject.localeCompare(target) です。stringObject が target より小さい場合、localeCompare() は 0 未満の数値を返します。 stringObject がターゲットより大きい場合、このメソッドは 0 より大きい数値を返します。 2 つの文字列が等しい場合、またはローカルの並べ替えルールに従って差異がない場合、このメソッドは 0 を返します。比較子はローカル ルールを使用します。ローカル ルールは、オペレーティング システムの基礎となるルールがこれらのローカル文字の並べ替えに使用されることを意味します。デフォルト たとえば、大なり記号を使用した比較は、2 つの文字の Unicode 番号を単純に比較するだけですが、これは多くの言語で矛盾します。
例
var arr = [ ['中' ,'国'], ['ああ','的'], ['ああ','的']];
arr.sort(function(x, y){
return x [0]. localeCompare(y[0]);
});
英語が含まれている場合、結果は中国語の文字のピンインによって並べ替えられます。デフォルトでは、英語が前に置かれます。純粋な英語の場合は、アルファベット順になり、大文字が小文字の後に来るため、中国語と中国語と英語の混合ソートを含む文字列ソートが可能になります。降順ソートについては上記と同様に、y[0].localeCompare(x[0]);を返すように変更します。
このようにして、ソートの問題が実現されます。js の 2 次元配列のソートが使用されている場所はまだたくさんあります。一部の人々の助けになれば幸いです
function tblSort(s){
for(r = 0;r < row_len;r ){
arrs[r]=[]
for(c=0;c< cel_len;c ){
arrs[r][c] ={}//2 次元配列に別のオブジェクトを作成します;
arrs[r][c].html = table.rows[r]。 cell [c].innerHTML//テーブルの HTML を取得し、ページ上で並べ替えて表示するために連想配列に入れます。arrs [r][c].text='-1 のテキストの内容が使用されます。 '; } else if(text ==' '){
arrs [r] [c] rrs [r] [c] .text = table.rows[r].cells [c].innerText//テーブルのテキストコンテンツを取得し、それを連想配列に入れます。以下の並べ替えに使用されます。
0] ['text'])
reverse order;
if(reve){
arrs.sort(function(x、y){
']) - parseFloat(x[s][' text']) 🎜> arrs.sort(function(x,y){
arrs.sort(function (x,y) { ]) - parseFloat(y[s][' text'])//Sort
// 配置された HTML コンテンツを table
for(r = 0;r < r ){
for(c=0;c table.rows[ r].cells[c].innerHTML =arrs[ r][c]['html']
🎜>