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

React Ag-Grid IP列排序问题:按数量及IP大小排序,取消第三排序状态

React中Ag-Grid IP列表列的自定义排序与排序状态限制

一、实现自定义排序逻辑

当前已实现按IP列表数量排序,需补充第二阶段的IP排序逻辑。核心是利用Ag-Grid comparator函数的第三个参数sortDirection,结合IP地址的数值比较:

1. 完善IP转整数工具函数

将IP地址转为整数,确保比较的准确性:

const ipToInt = (ip: string): number => {
  return ip.split('.').reduce((acc, octet) => {
    return (acc << 8) + parseInt(octet, 10);
  }, 0);
};

2. 改造comparator函数

替换原listSizeComparator,实现完整排序规则:

export const ipListComparator = (list1: Array<string>, list2: Array<string>, sortDirection: 'asc' | 'desc') => {
  // 优先按列表长度排序
  const lengthDiff = list1.length - list2.length;
  if (lengthDiff !== 0) {
    return sortDirection === 'asc' ? lengthDiff : -lengthDiff;
  }

  // 长度相同时,按排序方向取最小/最大IP比较
  const getTargetIp = (list: string[], direction: 'asc' | 'desc') => {
    if (!list?.length) return 0;
    const sortedIpInts = list.map(ipToInt).sort((a, b) => a - b);
    return direction === 'asc' ? sortedIpInts[0] : sortedIpInts.at(-1);
  };

  const ip1 = getTargetIp(list1, sortDirection);
  const ip2 = getTargetIp(list2, sortDirection);

  return sortDirection === 'asc' ? ip1 - ip2 : ip2 - ip1;
};

3. 更新列定义

将列的comparator替换为新的函数:

{
  headerName: t('tables.allIps.columns.ip.header'),
  headerTooltip: t('tables.allIps.columns.ip.desc'),
  colId: DeviceColumnIds.ip,
  valueGetter: agFields.interfaceIPSumGetter,
  comparator: agFields.ipListComparator // 替换为新比较器
}

二、取消第三排序状态(仅保留升序/降序)

Ag-Grid默认点击列头会循环「升序→降序→无排序」,通过配置sortingOrder可限制仅保留升序和降序:

1. 配置gridOptions

在表格的配置对象中添加sortingOrder:

const gridOptions = {
  // 其他原有配置...
  sortingOrder: ['asc', 'desc'], // 跳过无排序状态
};

2. 传入AgGridReact组件

将配置传给表格组件:

<AgGridReact
  gridOptions={gridOptions}
  // 其他props(如columnDefs、rowData等)
/>

内容的提问来源于stack exchange,提问作者D. Crypt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:30:14