Сортировать строку, содержащую числа случайным образом - PullRequest
1 голос
/ 12 марта 2020

Итак, я пытаюсь реализовать функцию сортировки в javascript. Я должен реализовать функцию «сравнить». Основная проблема заключается в том, что я не знаю, помещает ли пользователь чистые числа, частично числа или только текст в свою ячейку.

Требование: Я не знаю, какой формат данных использует пользователь в его строка

Проблема: Следующие примеры после функции сортировки.

  • Данные (чистые числа): 1, 10, 2, 3, ..., поскольку они интерпретируют 10 как "10", который предшествует "2".
  • Данные (числа с единицей): 1 m, 10 m, 2 m ... та же проблема, но здесь я не могу просто "попытаться" проанализировать, чтобы удвоить
  • Данные ( текст): test1, test10, test2, ... также неправильная сортировка, не анализируется.
  • Данные (числа с запятыми) 1.3 m, 10.3 m, 2.3 m

Эти примеры показывают данные, которые будут отображаться неправильно. Целый столбец заполнен текстом, он отлично работает.

Вопрос: Есть ли способ сравнить с существующим в javascript, который будет обрабатывать числа как таковые?

arrayToSort.sort((a, b) => {
    let valueA = a[key];
    let valueB = b[key];
    return valueB < valueA ? -1 : 1;
}

1 Ответ

1 голос
/ 12 марта 2020

Вы можете использовать String#localeCompare с опциями, которые применяют естественную сортировку.

var data = [1, 10, 2, 3, '1 m', '10 m', '2 m', 'test1', 'test10', 'test2', '1.3 m', '10.3 m', '2.3 m', 10.2, 10.3, 10.4];

data.sort((a, b) => a.toString().localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }))

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