Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Сортировка массива (https://javascript.ru/forum/events/61735-sortirovka-massiva.html)

javaphp 05.03.2016 19:04

Сортировка массива
 
Имеется массив
var arr = [ "art221827", "mus14111", "vid34343", "fol232926", "str34222", "sml161617", "all111456", "ind30040"]

Подскажите, как правильно его отсортировать. По отдельности методы для строк и для чисел не подходят. :help:

javaphp 05.03.2016 19:05

Методы для строк и чисел по отдельности сортируют не так как необходимо(

рони 05.03.2016 19:29

javaphp,
а как необходимо?

javaphp 05.03.2016 19:45

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

javaphp 05.03.2016 19:53

если б строковая и числовая составляющие были одинаковые, то можно использовать сортировку для строк. Не пойму как правильно разбить каждый элемент на строковую составляющую и числовую. Сначала сортировать по той части которая строка а затем по числовой.

рони 05.03.2016 20:37

javaphp,
результат сортировки напишите

javaphp 05.03.2016 20:49

Вот например, второй и третий элементы отсортированы неправильно. нужно поменять их местами в результате.
function compareNumeric(a, b) {
  if (a > b) return 1;
  if (a < b) return -1;
}

var arr = [ "art221827", "mus141111", "mus14114", "vid34343", "fol232926", "str34222", "sml161617", "all111456", "ind30040"];

arr.sort(compareNumeric);

alert(arr);

javaphp 05.03.2016 20:49

https://jsfiddle.net/9u9odnt2/

Lemme 05.03.2016 20:53

var arr = [ "art221827", "mus14111", "vid34343", "fol232926", "str34222", "sml161617", "all111456", "ind30040"];
  
arr.sort((a,b) => {
  var A = a.match(/(\D+)(\d+)/),
      B = b.match(/(\D+)(\d+)/);

  return A[1] > B[1] && +A[2] > +B[2] ? 1 : A[1] < B[1] && +A[2] < +B[2] ? -1 : 0
});
  
alert(arr);

рони 05.03.2016 21:08

:-?
Цитата:

Сообщение от рони
результат сортировки напишите



Часовой пояс GMT +3, время: 12:59.