javascript - 如果数字:true is set in localeCompare function会有什么变化吗

标签 javascript html function

我有包含数字和字符串类型的表值,并且想知道设置 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/

相关文章:

html - 当我突破 767px 宽度时,Bootstrap 3 会删除填充/边距

ios - 允许 Swift 函数参数有多种类型

function - Pascal - 在定义之前使用过程

javascript - 检查 div 之后是否存在某些内容

javascript - 如果验证失败则停止表单提交。

javascript - 如何在jQuery中使用Goto语句?

javascript - 在函数参数 Javascript 上使用 toSentenceCase

javascript - Angular JS 指令在 Visualforce(salesforce) 中不起作用?

javascript - 当我选中 1 和 2 复选框时,我在 asp.net webform 中已经有 3 个复选框和 1 个文本框,然后结果文本框将为 1,2

html - 事件桌面网站打开程序?