Сортировать массив javascript по цифрам и буквам - PullRequest
0 голосов
/ 08 мая 2020

Я хочу отсортировать этот javascript массив:

 [103,3,4,6,8,"8L",67,1,11,19,68,86,107,"9L"];

отсортировать его по цифрам и буквам, поэтому результат будет выглядеть так:

 [1,3,4,6,8,"8L","9L",11,19,67,68,86,103,107];

Когда я пытаюсь используйте sort(), это не работает:

 [1,3,4,6,8,68,103,"8L",11,19,67,86,107,"9L"]; // 8L and 9L are in the wrong place

// correct wanted order
var correct = [1,3,4,6,8,"8L","9L",11,19,67,68,86,103,107];
document.body.innerHTML += 'correct wanted order: ' + JSON.stringify(correct) + '
'; // массив для заказа var unordered = [103,3,4,6,8, "8L", 67,1,11,19,68,86,107, "9L"]; document.body.inner HTML + = ' массив для заказа:
' + JSON.stringify(unordered) + '
'; неупорядоченный = неупорядоченный. карта (элемент => {возвратный элемент;}); var order = unordered.sort (функция (a, b) {return a - b;}); document.body.inner HTML + = ' попытка заказа:
' + JSON.stringify(ordered) + '
';

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Похоже, вы захотите начать с обработки всего в вашей функции сортировки как строки. Затем отделите числа от остальной части строки и проверьте их отдельно. Примерно так:

const ordered = unordered.sort(function(a, b) {
  // Break apart the assumed strings (Numbers then everything else)
  const [, aNumber, aString] = `${a}`.match(/(\d*)(.*)/);
  const [, bNumber, bString] = `${b}`.match(/(\d*)(.*)/);

  // Test numbers
  if(Number(aNumber) < Number(bNumber)) return -1;
  if(Number(aNumber) > Number(bNumber)) return 1;

  // Test letters if there is a tie
  return aString < bString ? -1 : 1;
});

1 голос
/ 08 мая 2020

Вы можете легко сделать это, используя метод array .sort() & localeCompare(), передав параметр {numeric: true}, например:

var unordered = [103,3,4,6,8,"8L",67,1,11,19,68,86,107,"9L"];
var correct = unordered.sort((a,b) => 
  a.toString().localeCompare(b.toString(), undefined, {numeric: true}))
console.log( correct )
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...