簡體   English   中英

在JavaScript中,我如何通過asc / desc對數組數組進行排序

[英]In JavaScript how do I sort an array of arrays by asc / desc

技術: Angular 7,AngularCli,JS和TS。

在Js中,我如何按asc和desc順序對數組進行排序

這是我的示例數組:

this.tableRows = [
  [ 'zz', 'cc' ],
  [ 'aa', 'cc' ],
  [ 'uu', 'dd' ]
];

我想按列位置和asc / desc對上面的內容進行排序。

這是我的HTML:

<tr ls-table-row class="child-row" *ngFor="let row of tableRows">
  <td ls-table-cell *ngFor="let cell of row">{{ cell }}</td>
</tr>

我將傳遞類型和columnPosition的@inputs,如下所示:

  @Input() public sortByColumnPosiition = 1;
  @Input() public sortByType = 'asc';

這些解釋了我想要排序的列和類型解釋方向,例如desc。

這是我目前的排序示例:

  sortByColumnPosition = 0;
  sortByType = 0;

  public sortBy(data: Array<Array<any>>) {
    return [ ...data ].sort((a, b) => a[ this.sortByColumnPosition ].localeCompare(b[ this.sortByColumnPosition ]) * this.sortByType);
  }

以上是我當前的嘗試 - 但僅適用於第0列而不是第1列

您可以創建一個函數,它接受數組,列號和排序順序(asc / desc)。

您可以使用技巧為asc / desc排序使用相同的函數。 有一個值為1-1的變量。 始終將它與每個結果或sort()回調相乘。 如果你將傳遞1 ,它將asc和desc排序為-1

 const tableRows = [ ['zz', 'cc'], ['aa', 'cc'], ['uu', 'dd'] ]; function sortBy(arr, col, type = 1) { return [...arr].sort((a, b) => a[col].localeCompare(b[col]) * type) } console.log(sortBy(tableRows, 1)) //asc console.log(sortBy(tableRows, 0, -1)) //desc 

您可以使用.localeCompare()來檢查排序順序中首先出現的字符串。

 const tableRows = [ [ 'zz', 'cc' ], [ 'aa', 'cc' ], [ 'uu', 'dd' ] ]; function sortAscending(arr) { // To avoid mutating the original array, make a deep copy const arrToSort = Array.from(arr); return arrToSort.sort(([a, b], [c, d]) => a.localeCompare(c) || b.localeCompare(d)); } function sortDescending(arr) { // To avoid mutating the original array, make a deep copy const arrToSort = Array.from(arr); return arrToSort.sort(([a, b], [c, d]) => c.localeCompare(a) || d.localeCompare(b)); } const sortedAscArr = sortAscending(tableRows); const sortedDescArr = sortDescending(tableRows); console.log(sortedAscArr); console.log(sortedDescArr); 

如果您使用角度,您可以使用管道在asc / desc中進行排序

import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
  name: "sort"
})
export class ArraySortPipe  implements PipeTransform {
  transform(array: any, field: string): any[] {
    if (!Array.isArray(array)) {
      return;
    }
    function sortBy(arr, field){
     let type = 1;
     let col = 0;
     if(field == 'DESC'){
       type = -1;
       col = 0;
     }
     return [...arr].sort((a,b) => a[col].localeCompare(b[col]) * type)
    }
    sortBy(array,field)
   }
}


<tr ls-table-row class="child-row" *ngFor="let row of tableRows | sort:'ASC'>
 <td ls-table-cell *ngFor="let cell of row">{{ cell }}</td>
</tr>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM