LoDashorderBy
函式非常简单——您将要排序的集合、要排序的属性传递给它,然后可以选择对这些属性进行排序是升序还是降序。典型的用法可能如下所示:
let sortedCollection = _.orderBy(unsortedCollection, ['columnA', 'columnB'], ['asc', 'desc']);
我需要能够动态设定要排序的属性以及每个属性的排序是升序还是降序。我动态设定要排序的属性没有问题,但我不知道如何动态设定升序/降序选项。我有一个SortOrderItem
带有name
andorder
属性的物件。如果order
是,true
则该属性应按升序排序,否则按降序排序。
namespace app.models {
export class SortOrderItem {
name: string;
order: boolean;
}
}
我有一个sortOrder
在 UI 中设定的阵列(存盘在一个名为 的阵列中),当我想对我的集合进行排序时,我回圈遍历阵列以构建属性和(希望)排序顺序:
private getSortedRecords(unsortedCollection: any[]): any[] {
let sortColumns: string[] = [];
let sortOrders: string[] = [];
_.forEach(this.sortOrder,
(item: models.SortOrderItem) => {
sortColumns.push(item.name);
sortOrders.push(item.order ? 'asc' : 'desc');
});
return _.orderBy(unsortedCollection, sortColumns, sortOrders);
}
但是,这不起作用,因为它不喜欢第三个自变量的字符串阵列。我得到:
TS2769:(TS) 没有与此呼叫匹配的过载。 最后一个多载给出了以下错误。 'string[]' 型别的自变量不能分配给'Many <boolean | “升序” | “描述”>'。 型别 'string[]' 不能分配给型别 'readonly (boolean | "asc" | "desc")[]'。 型别 'string' 不可分配给型别 'boolean | “升序” | “描述”'。
所以我尝试使用readonly(boolean|'asc'|'desc')[]
作为我的sortOrders
变量的型别:
let sortOrders: readonly(boolean|'asc'|'desc')[] = [];
这不起作用,因为那时我收到此错误:
TS2339:(TS) 属性 'push' 不存在于型别 'readonly (boolean|"asc"|"desc")[]' 上。
如何设定它以便动态定义最后一个自变量?
uj5u.com热心网友回复:
定义一个SortOrder
型别:
type SortOrder = 'asc' | 'desc';
并将其用作以下型别sortOrders
:
function getSortedRecords(unsortedCollection: any[]): any[] {
const sortColumns: string[] = [];
const sortOrders: SortOrder[] = [];
_.forEach(this.sortOrder,
(item: SortOrderItem) => {
sortColumns.push(item.name);
sortOrders.push(item.order ? 'asc' : 'desc');
});
return _.orderBy(unsortedCollection, sortColumns, sortOrders);
}
0 评论