我有一个包含54个元素的数组。我想按它的transactionAmount排序。这是代码和console.log输出:-
sortData(sort: Sort) {
const data = this.dataSource.filteredData;
console.log('Before sort');
this.logAll(this.dataSource.filteredData as TransactionSearch[]);
(data as TransactionSearch[]).sort((left, right) => {
// (this.dataSource.filteredData as TransactionSearch[]).sort((left, right) => {
const isAsc = sort.direction === 'asc';
switch (sort.active) {
case 'currency':
return this.compareTransactionRow(left.currency, right.currency, isAsc);
case 'processingState':
return this.compareTransactionRow(left.processingState, right.processingState, isAsc);
case 'transactionAmount':
return this.compareTransactionRow(left.transactionAmount, right.transactionAmount, isAsc);
case 'messageFunction':
return this.compareTransactionRow(left.messageFunction, right.messageFunction, isAsc);
case 'transactionDate':
return this.compareTransactionRow(left.transactionDate, right.transactionDate, isAsc);
default: return 0;
}
});
this.dataSource.filteredData = data;
console.log('After sort');
this.logAll(this.dataSource.filteredData as TransactionSearch[]);
}
compareTransactionRow(left: string | Date, right: string | Date, isAsc: boolean) {
let result = 0;
if ( left < right ) {
result = -1;
} else if ( left > right) {
result = 1;
}
result = result * (isAsc ? 1 : -1);
return result;
}
logAll(data: TransactionSearch[]) {
let i = 0;
// tslint:disable-next-line:no-shadowed-variable
data.forEach( element => {
console.log('Element: ' + i.toString());
// console.log(element);
console.log('element.transactionAmount: ' + element.transactionAmount);
i++;
}
);
}
它是由54个元素组成的庞大数组。因此,在对console.log()进行排序之前:
Element: 0
element.transactionAmount: 30.00
Element: 1
element.transactionAmount: 100.00
Element: 2
element.transactionAmount: 1.00
Element: 3
element.transactionAmount: 3.00
Element: 4
element.transactionAmount: 3.00
Element: 5
element.transactionAmount: 1.00
Element: 6
element.transactionAmount: 2.00
Element: 7
element.transactionAmount: 2.00
Element: 8
element.transactionAmount: 10.00
Element: 9
element.transactionAmount: 10.00
Element: 10
element.transactionAmount: 10.00
Element: 11
element.transactionAmount: 10.00
Element: 12
element.transactionAmount: 12.00
Element: 13
element.transactionAmount: 12.00
Element: 14
element.transactionAmount: 10.00
Element: 15
element.transactionAmount: 10.00
Element: 16
element.transactionAmount: 10.00
Element: 17
element.transactionAmount: 1.00
Element: 18
element.transactionAmount: 10.00
Element: 19
element.transactionAmount: 100.00
Element: 20
element.transactionAmount: 100.00
Element: 21
element.transactionAmount: 100.00
Element: 22
element.transactionAmount: 100.00
Element: 23
element.transactionAmount: 10.00
Element: 24
element.transactionAmount: 100.00
Element: 25
element.transactionAmount: 1.00
Element: 26
element.transactionAmount: 2.00
Element: 27
element.transactionAmount: 100.00
Element: 28
element.transactionAmount: 2.00
Element: 29
element.transactionAmount: 2.00
Element: 30
element.transactionAmount: 2.00
Element: 31
element.transactionAmount: 10.00
Element: 32
element.transactionAmount: 10.00
Element: 33
element.transactionAmount: 100.00
Element: 34
element.transactionAmount: 100.00
Element: 35
element.transactionAmount: 100.00
Element: 36
element.transactionAmount: 100.00
Element: 37
element.transactionAmount: 50.00
Element: 38
element.transactionAmount: 50.00
Element: 39
element.transactionAmount: 50.00
Element: 40
element.transactionAmount: 50.00
Element: 41
element.transactionAmount: 100.00
Element: 42
element.transactionAmount: 10.00
Element: 43
element.transactionAmount: 100.00
Element: 44
element.transactionAmount: 100.00
Element: 45
element.transactionAmount: 10.00
Element: 46
element.transactionAmount: 30.00
Element: 47
element.transactionAmount: 100.00
Element: 48
element.transactionAmount: 1.00
Element: 49
element.transactionAmount: 1.00
Element: 50
element.transactionAmount: 10.00
Element: 51
element.transactionAmount: 10.00
Element: 52
element.transactionAmount: 10.00
Element: 53
element.transactionAmount: 10.00
排序后如下:-
Element: 0
element.transactionAmount: 1.00
Element: 1
element.transactionAmount: 1.00
Element: 2
element.transactionAmount: 1.00
Element: 3
element.transactionAmount: 1.00
Element: 4
element.transactionAmount: 1.00
Element: 5
element.transactionAmount: 1.00
Element: 6
element.transactionAmount: 10.00
Element: 7
element.transactionAmount: 10.00
Element: 8
element.transactionAmount: 10.00
Element: 9
element.transactionAmount: 10.00
Element: 10
element.transactionAmount: 10.00
Element: 11
element.transactionAmount: 10.00
Element: 12
element.transactionAmount: 10.00
Element: 13
element.transactionAmount: 10.00
Element: 14
element.transactionAmount: 10.00
Element: 15
element.transactionAmount: 10.00
Element: 16
element.transactionAmount: 10.00
Element: 17
element.transactionAmount: 10.00
Element: 18
element.transactionAmount: 10.00
Element: 19
element.transactionAmount: 10.00
Element: 20
element.transactionAmount: 10.00
Element: 21
element.transactionAmount: 10.00
Element: 22
element.transactionAmount: 10.00
Element: 23
element.transactionAmount: 100.00
Element: 24
element.transactionAmount: 100.00
Element: 25
element.transactionAmount: 100.00
Element: 26
element.transactionAmount: 100.00
Element: 27
element.transactionAmount: 100.00
Element: 28
element.transactionAmount: 100.00
Element: 29
element.transactionAmount: 100.00
Element: 30
element.transactionAmount: 100.00
Element: 31
element.transactionAmount: 100.00
Element: 32
element.transactionAmount: 100.00
Element: 33
element.transactionAmount: 100.00
Element: 34
element.transactionAmount: 100.00
Element: 35
element.transactionAmount: 100.00
Element: 36
element.transactionAmount: 100.00
Element: 37
element.transactionAmount: 100.00
Element: 38
element.transactionAmount: 12.00
Element: 39
element.transactionAmount: 12.00
Element: 40
element.transactionAmount: 2.00
Element: 41
element.transactionAmount: 2.00
Element: 42
element.transactionAmount: 2.00
Element: 43
element.transactionAmount: 2.00
Element: 44
element.transactionAmount: 2.00
Element: 45
element.transactionAmount: 2.00
Element: 46
element.transactionAmount: 3.00
Element: 47
element.transactionAmount: 3.00
Element: 48
element.transactionAmount: 30.00
Element: 49
element.transactionAmount: 30.00
Element: 50
element.transactionAmount: 50.00
Element: 51
element.transactionAmount: 50.00
Element: 52
element.transactionAmount: 50.00
Element: 53
element.transactionAmount: 50.00
如您所见,它已正确排序。这种排序有什么问题。
答案 0 :(得分:0)
由于您将值比较为string
而不是numbers
,因此可以解析这些值:
compareTransactionRow(left: string | Date, right: string | Date, isAsc: boolean) {
let result = 0;
if (typeof left === "string" && typeof right === "string") {
left = parseFloat(left);
right = parseFloat(right);
}
if ( left < right ) {
result = -1;
} else if ( left > right) {
result = 1;
}
result = result * (isAsc ? 1 : -1);
return result;
}