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

AG-GRID无限行模型:实现当前页客户端通用排序方案

优化AG-Grid客户端排序的冗余代码

你当前为每个列编写独立排序逻辑的方式确实会产生大量冗余代码,这里提供一种通用化的实现方案,无需为每一列单独写switch-case:

通用排序函数实现

function sortData(data, sortModel) {
  const { colId, sort } = sortModel;
  // 排序方向系数:升序为1,降序为-1
  const sortFactor = sort === 'asc' ? 1 : -1;

  data.sort((a, b) => {
    const valA = a[colId];
    const valB = b[colId];

    // 处理空值/undefined,让空值排在最后(可根据需求调整)
    if (valA == null && valB == null) return 0;
    if (valA == null) return 1 * sortFactor;
    if (valB == null) return -1 * sortFactor;

    // 根据数据类型选择比较方式
    if (typeof valA === 'number' && typeof valB === 'number') {
      return (valA - valB) * sortFactor;
    }
    if (valA instanceof Date && valB instanceof Date) {
      return (valA.getTime() - valB.getTime()) * sortFactor;
    }
    // 字符串类型(支持多语言排序)
    return valA.toString().localeCompare(valB.toString()) * sortFactor;
  });

  return data;
}

核心优化点

  1. 通用字段匹配:通过a[colId]直接映射对应列的字段值,无需硬编码列名
  2. 方向统一处理:用sortFactor统一控制升序/降序逻辑,避免重复编写正反比较代码
  3. 多类型兼容:自动处理数字、日期、字符串三种常见数据类型的排序,覆盖大部分业务场景
  4. 空值统一处理:预设空值/undefined的排序优先级,可根据业务需求调整(比如改为让空值排最前)

额外提示

因为你使用的是infinite行模型,客户端排序时需要注意:

  • 当前缓存的区块数据会被排序,但切换到未缓存页面时,新获取的数据仍需重新执行排序逻辑
  • 若要实现全局客户端排序,建议一次性获取全量数据后再做排序(但这会失去服务端分页的优势,需根据数据量权衡)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:00:58