javascript - 在 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 列
解决方案
您可以创建一个接受数组、列号和排序顺序(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
推荐阅读
- c - 在 c 中打印输出居中对齐的解决方案
- r - 基于条件语句在列表中存储多个变量
- css - 字体文本边界大于文本内容
- c++ - 在c ++中删除对象是否也会删除对象中包含的指针引用的其他对象
- javascript - 无法使用 jquery 按钮提交表单
- javascript - 修复 vue 数据映射以按日期和员工分组
- maven - Gradle 7.1.1 找不到 jp.classmethod.aws:gradle-aws-plugin
- foreach - 如何在此状态下替换循环内的循环
- flutter - 如何根据用户的点击保持小部件扩展?
- node.js - Node、Express、Socket.io 无法连接到服务器