首页 > 解决方案 > 在 JavaScript 中,如何按 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>

我将像这样传递 type 和 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 列

标签: javascriptarraysangularsortingmultidimensional-array

解决方案


您可以创建一个接受数组、列号和排序顺序(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


推荐阅读