Для начала создадим карту массива.
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);