diff --git a/packages/s2-core/__tests__/unit/utils/sort-action-spec.ts b/packages/s2-core/__tests__/unit/utils/sort-action-spec.ts index 2b133e61bd..a588b287f8 100644 --- a/packages/s2-core/__tests__/unit/utils/sort-action-spec.ts +++ b/packages/s2-core/__tests__/unit/utils/sort-action-spec.ts @@ -202,6 +202,30 @@ describe('Sort By Custom', () => { 'Wednesday[&]afternoon', ]); }); + + test('sort by custom with semblable value', () => { + const params = { + originValues: [ + '我也是测1试', + '我是测试', + '我也是测试', + '我也是测试1', + '我也是1测试', + '测试', + ], + sortByValues: ['测试', '我是测试'], + }; + + // 原来的处理是 endsWith 去模糊匹配维值, 导致其他维值会排序到最上方 + expect(sortByCustom(params)).toEqual([ + '测试', + '我是测试', + '我也是测1试', + '我也是测试', + '我也是测试1', + '我也是1测试', + ]); + }); }); describe('Sort By Func Tests', () => { diff --git a/packages/s2-core/src/utils/sort-action.ts b/packages/s2-core/src/utils/sort-action.ts index daac42a9b2..fd2ed93f4d 100644 --- a/packages/s2-core/src/utils/sort-action.ts +++ b/packages/s2-core/src/utils/sort-action.ts @@ -1,6 +1,5 @@ import { compact, - endsWith, flatMap, includes, indexOf, @@ -8,6 +7,7 @@ import { isNaN, isNil, keys, + last, map, sortBy, split, @@ -99,8 +99,10 @@ export const sortByCustom = (params: SortActionParams): string[] => { const { sortByValues, originValues } = params; // 从 originValues 中过滤出所有包含 sortByValue 的 id - const idWithPre = originValues.filter((originItem) => - sortByValues.find((value) => endsWith(originItem, value)), + const idWithPre = originValues.filter((originValue) => + sortByValues.find((value) => { + return last(split(originValue, ID_SEPARATOR)) === value; + }), ); // 将 id 拆分为父节点和目标节点 const idListWithPre = idWithPre.map((idStr) => {