@leshaogonkov
Frontend Developer

Способы сортировки смешанных данных массива?

Нужно отсортировать массив, состоящий из смешанных данных (строки, но если требуется, нужно распознать что «1» это 1). Пока пришел к такому решению:

function doCompare(a, b) {
  var first_int = parseInt(a, 10);
  var second_int = parseInt(b, 10);
  
  if (isNaN(first_int) && isNaN(second_int)) {
    var str_one = a.toLocaleLowerCase();
    var str_two = b.toLocaleLowerCase();

    return str_one.localeCompare(str_two);
  } else if (isNaN(first_int)) {
    return 1;
  } else if (isNaN(second_int)) {
    return -1;
  } else {
    return a - b;
  }
}
Есть ли элегантные решения задачи?
  • Вопрос задан
  • 2952 просмотра
Пригласить эксперта
Ответы на вопрос 2
Wott
@Wott
Ну на вскидку
function doCompare(a, b) {
  var r = a-b;

  if (isNaN(r)) {
    r = isNaN(a)-isNaN(b);
    if (r == 0) {
      r = a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase());
    }
  }

  return r;  
}

Фичей будет то что распознает числа в виде hex и так далее :)

А вообще нормально было, хотя не понятно зачем такое сравнение.
Если профайл говорит что функция критична, то надо смотреть что чаще встречается и переделать так что бы чаще встречаемое было первым при проверках. То что у меня выше — лучше работает если много цифр.

Если профилирование не было и вообще это ради искусства, то лучше не трогать :)
Ответ написан
taliban
@taliban
php программист
А лично вам что не нравится в этом решении? Вы ведь не каждую фукнцию спрашиваете. Значит конкретно здесь вас что-то напрягает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы