Vas*_*ram 1 html javascript function
我有带有数字和字符串类型的表值,并且想知道设置数字 true 会带来对列中字符串值进行排序的任何更改
是的,将数据视为数字确实可以改变顺序。考虑一下:
const column = [ "1", "3", "10", "24", "212" ];
column.sort((a, b) => a.localeCompare(b));
console.log("lexicographical sort:", column);
column.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
console.log("sort with numeric collation:", column);Run Code Online (Sandbox Code Playgroud)
字典顺序排序"10"位于前面"2",因为"1" < "2"而不是检查整个数字。如果您也有相同的名称,这也可以工作:
const column = [ "file_1", "file_3", "file_10", "file_24", "file_212" ];
column.sort((a, b) => a.localeCompare(b));
console.log("lexicographical sort:", column);
column.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
console.log("sort with numeric collation:", column);Run Code Online (Sandbox Code Playgroud)
但在某些情况下,如果您不想将数字视为一个整体单位,则可能是不可取的:
const column = [ "1 Somewhere Street", "3 Some Avenue", "10 Some Avenue", "24 Parking", "212 Whatever Road" ];
column.sort((a, b) => a.localeCompare(b));
console.log("lexicographical sort:", column);
column.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
console.log("sort with numeric collation:", column);
column.sort((a, b) => {
const regex = /^(\d+)\s+(.*)/;
const [, numericA, stringA] = a.match(regex);
const [, numericB, stringB] = b.match(regex);
return stringA.localeCompare(stringB)
|| numericA.localeCompare(numericB, undefined, { numeric: true })
});
console.log("sort with starting numerics treated last:", column);Run Code Online (Sandbox Code Playgroud)
因此,这取决于您的数据是什么样子以及您希望如何呈现。
| 归档时间: |
|
| 查看次数: |
847 次 |
| 最近记录: |