我有包含数字和字符串类型的表值,并且想知道设置 numeric 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);
词典排序位置 "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);
但在某些情况下可能不受欢迎,如果您不想将数字视为一个整体单位:
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);
因此,这取决于您的数据是什么样子以及您希望如何呈现。
关于javascript - 如果数字:true is set in localeCompare function会有什么变化吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396607/