Как сортировать числа и строки, сохраняя строки в порядке и спереди, а номера сортировать сзади в JS? - PullRequest
0 голосов
/ 23 января 2019

Скажем, у меня есть такой массив:

["a", "bb", 1, 2, "z", 4, 3]

, и я хочу, чтобы массив результатов был таким:

["a", "bb", "z", 1, 2, 3, 4]

Как мне написать это?У меня есть это как мой предикат:

export const someBrokenSort = (option1, option2) => {
  const numberOption1 = Number(stripCommas(option1));
  const numberOption2 = Number(stripCommas(option2));
  if (numberOption1 < numberOption2 || isNaN(numberOption1)) return -1;
  if (numberOption1 > numberOption2 || isNaN(numberOption2)) return 1;

  return 0;
};

Но это приводит к этому:

 ["z", "bb", "a", 1, 2, 3, 4]

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вы можете проверить тип и переместить строки наверх.

var array = ["a", "bb", 1, 2, "z", 4, 3];
array.sort((a, b) => 
    (typeof a === 'number') - (typeof b === 'number') ||
    a - b
);

console.log(array);
0 голосов
/ 24 января 2019

Согласно возвращаемым значениям сортировать сравнить функцию мое предложение:

  1. строка - число -> первая строка
  2. число - строка -> число после
  3. преобразовать в строку и сравнить

var array = ["a", "zbb", 1, 0, 2, "z", 4, 3];
array.sort(function (a, b) {
    return (typeof a === 'string' && typeof b === 'number') ? -1 :
            (typeof a === 'number' && typeof b === 'string') ? 1 :
                          a.toString().localeCompare(b.toString());
});

console.log(array);
0 голосов
/ 23 января 2019

Как вариант:

const arr = ["a", "bb", 1, 2, "z", 4, 3];

const sorted = [
  ...arr.filter(el => typeof el === 'string'),
  ...arr.filter(el => typeof el === 'number').sort(),
];

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