排序后,数字变,字母顺序排列?

2026-04-01 20:111阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计408个文字,预计阅读时间需要2分钟。

排序后,数字变,字母顺序排列?

我想按字母顺序排序表,除了数字。下面的代码展示了如何使用比较器函数对表进行排序:

javascriptfunction compare(a, b) { return a.N.localeCompare(b.N);}

let obj=[ { N: Green 1 }, { N: Green 11 }, { N: Green 2 }];

排序后的结果为:

javascript[ { N: Green 1 }, { N: Green 2 }, { N: Green 11 }]

排序后,数字变,字母顺序排列?

我想按字母顺序排序表.除了数字.

下面的代码显示了如何使用比较器函数对表进行排序:

function( a,b ) return a.N < b.N end

给我:

obj = { [1] = { ["N"] = "Green 1"; }; [2] = { ["N"] = "Green 11"; }; [3] = { ["N"] = "Green 2"; }; [4] = { ["N"] = "Red 1"; }; }

但是我希望它像这样排序:

obj = { [1] = { ["N"] = "Green 1"; }; [2] = { ["N"] = "Green 2"; }; [3] = { ["N"] = "Green 11"; }; [4] = { ["N"] = "Red 1"; }; }

可能吗?

本来打算发布这个,但是lhf发布的解决方案回答了你的问题.由于您仍然遇到问题,请尝试以下操作.

local function cmp(a, b) a = tostring(a.N) b = tostring(b.N) local patt = '^(.-)%s*(%d+)$' local _,_, col1, num1 = a:find(patt) local _,_, col2, num2 = b:find(patt) if (col1 and col2) and col1 == col2 then return tonumber(num1) < tonumber(num2) end return a < b end local obj = { { N = '1' }, { N = 'Green1' }, -- works with optional space { N = 'Green' }, -- works when doesn't fit the format { N = 'Sky blue99' }, { N = 'Green 11' }, { N = 'Green 2' }, { N = 'Red 02' }, -- works when has leading zeros { N = 'Red 01' }, -- works with padding spaces { N = 'Sky blue 42' }, -- works with multi-word color names { N = 99 }, -- works with numbers } table.sort(obj, cmp) for i,v in ipairs(obj) do print(i, v.N) end

打印:

1 1 2 99 3 Green 4 Green1 5 Green 2 6 Green 11 7 Red 01 8 Red 02 9 Sky blue 42 10 Sky blue99

本文共计408个文字,预计阅读时间需要2分钟。

排序后,数字变,字母顺序排列?

我想按字母顺序排序表,除了数字。下面的代码展示了如何使用比较器函数对表进行排序:

javascriptfunction compare(a, b) { return a.N.localeCompare(b.N);}

let obj=[ { N: Green 1 }, { N: Green 11 }, { N: Green 2 }];

排序后的结果为:

javascript[ { N: Green 1 }, { N: Green 2 }, { N: Green 11 }]

排序后,数字变,字母顺序排列?

我想按字母顺序排序表.除了数字.

下面的代码显示了如何使用比较器函数对表进行排序:

function( a,b ) return a.N < b.N end

给我:

obj = { [1] = { ["N"] = "Green 1"; }; [2] = { ["N"] = "Green 11"; }; [3] = { ["N"] = "Green 2"; }; [4] = { ["N"] = "Red 1"; }; }

但是我希望它像这样排序:

obj = { [1] = { ["N"] = "Green 1"; }; [2] = { ["N"] = "Green 2"; }; [3] = { ["N"] = "Green 11"; }; [4] = { ["N"] = "Red 1"; }; }

可能吗?

本来打算发布这个,但是lhf发布的解决方案回答了你的问题.由于您仍然遇到问题,请尝试以下操作.

local function cmp(a, b) a = tostring(a.N) b = tostring(b.N) local patt = '^(.-)%s*(%d+)$' local _,_, col1, num1 = a:find(patt) local _,_, col2, num2 = b:find(patt) if (col1 and col2) and col1 == col2 then return tonumber(num1) < tonumber(num2) end return a < b end local obj = { { N = '1' }, { N = 'Green1' }, -- works with optional space { N = 'Green' }, -- works when doesn't fit the format { N = 'Sky blue99' }, { N = 'Green 11' }, { N = 'Green 2' }, { N = 'Red 02' }, -- works when has leading zeros { N = 'Red 01' }, -- works with padding spaces { N = 'Sky blue 42' }, -- works with multi-word color names { N = 99 }, -- works with numbers } table.sort(obj, cmp) for i,v in ipairs(obj) do print(i, v.N) end

打印:

1 1 2 99 3 Green 4 Green1 5 Green 2 6 Green 11 7 Red 01 8 Red 02 9 Sky blue 42 10 Sky blue99