Показать сообщение отдельно
  #2 (permalink)  
Старый 11.03.2014, 13:43
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Для начала создадим карту массива.

var map = {};


Затем положим в эту карту по ключам значений массива количество их повторов.

var arr = [5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1];

for (var i = 0; i < arr.length - 1; i++) {
   if (!map[arr[i]]) {
        map[arr[i]] = 1;
   }
   if (arr[i] == arr[i+1]) {     
     map[arr[i]]++;
   }
}


Создадим массив, в котором будет результат и наполним его.

var result = [];
for (var i in map)
  result.push(i);


Отсортируем массив согласно ваших условий:

result.sort(function (a, b) {

  if (map[a]>map[b]) {
    return 1;
  } else if (map[a]<map[b]) {
    return -1;
  } else if (map[a]==map[b]) {
    return a-b;
  }
   
});


Итого:

var arr = [5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1],
     map = {}, result = [];

for (var i = 0; i < arr.length - 1; i++) {
   if (!map[arr[i]]) {
        map[arr[i]] = 1;
   }
   if (arr[i] == arr[i+1]) {     
     map[arr[i]]++;
   }
}

for (var i in map)
  result.push(parseInt(i));

result.sort(function (a, b) {

  if (map[a]>map[b]) {
    return 1;
  } else if (map[a]<map[b]) {
    return -1;
  } else if (map[a]==map[b]) {
    return a-b;
  }
   
});

alert(result);

Последний раз редактировалось tsigel, 11.03.2014 в 13:48.
Ответить с цитированием