LoDashorderBy函式非常簡單——您將要排序的集合、要排序的屬性傳遞給它,然后可以選擇對這些屬性進行排序是升序還是降序。典型的用法可能如下所示:
let sortedCollection = _.orderBy(unsortedCollection, ['columnA', 'columnB'], ['asc', 'desc']);
我需要能夠動態設定要排序的屬性以及每個屬性的排序是升序還是降序。我動態設定要排序的屬性沒有問題,但我不知道如何動態設定升序/降序選項。我有一個SortOrderItem帶有nameandorder屬性的物件。如果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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405348.html
標籤:
上一篇:遍歷字串地址陣列
