будут ли какие-либо изменения, если в функции localeCompare установлено значение numeric: true - PullRequest
0 голосов
/ 15 октября 2019

У меня есть табличные значения с числовыми и строковыми типами, и я хочу знать, что установка числового true принесет любые изменения для сортировки строковых значений в столбце

1 Ответ

1 голос
/ 15 октября 2019

Да, обработка данных как числовых действительно может изменить порядок. Учтите это:

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" a до "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);

Итак, это зависит от того, как выглядят ваши данные и как вы хотите их представить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...