拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用带有动态值的LoDashorderBy进行升序或降序排序

使用带有动态值的LoDashorderBy进行升序或降序排序

白鹭 - 2022-02-11 2150 0 0

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);
}
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *