You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Observable返回的TableData结果进行多条件链式排序

解决方案

你可以在tableDataRows$的pipe管道中追加排序逻辑,先实现多字段优先级排序方法,再对返回的rows数组做排序处理,完整实现如下:

第一步:编写排序工具方法

// 按优先级排序:先employee,再project,默认升序
const sortTableRows = (rows: TableRow[]) => {
  // 排序前先浅拷贝数组,避免修改原数组引发副作用
  return [...rows].sort((a, b) => {
    // 1. 优先比较employee字段,这里用id作为排序依据,也可根据需求替换为姓名拼接逻辑
    const employeeA = a[EMPLOYEE_KEY]?.id ?? '';
    const employeeB = b[EMPLOYEE_KEY]?.id ?? '';
    if (employeeA < employeeB) return -1;
    if (employeeA > employeeB) return 1;
    
    // 2. employee值相等时再比较project字段
    const projectA = a[PROJECT_KEY]?.id ?? '';
    const projectB = b[PROJECT_KEY]?.id ?? '';
    if (projectA < projectB) return -1;
    if (projectA > projectB) return 1;
    
    return 0;
  })
}

如果需要调整为降序排序,把对应判断的返回值1和-1互换即可。

第二步:修改Observable链式调用

在原有map操作后追加排序逻辑即可:

tableDataColumns$ = this.activityCollection.groupedEntities$?.pipe(
  map((e) => e.columns)
);
tableDataRows$ = this.activityCollection.groupedEntities$?.pipe(
  map((e) => e.rows),
  map(rows => sortTableRows(rows))
);

如果后续需要支持用户动态选择排序字段,只需要把排序的字段列表提取为参数传入sortTableRows方法,循环判断字段优先级即可。

内容的提问来源于stack exchange,提问作者Man24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:57:05