Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2014, 04:55
Кандидат Javascript-наук
Отправить личное сообщение для BorisBritva Посмотреть профиль Найти все сообщения от BorisBritva
 
Регистрация: 17.03.2010
Сообщений: 145

Помогите с масивами пожалуйста
Есть массив - 5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1

Как сделать из него другой массив, чтобы каждое из значений осталось только одно с условиями, что чем больше одинаковых значений в данном массиве, тем первее оно стоит. Если каких то из значений одинаковое количество, то первее должно стоять то, которое больше.

Благодарю.
Ответить с цитированием
  #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.
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2014, 14:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

BorisBritva,

var arr = [5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1], map = {}, result = [];;
arr.forEach(function (a) {
         map[a] ? map[a]++ : map[a] = 1
     });
     result = Object.keys(map);
     result.sort(function (a, b) {
         return map[a] - map[b] || a - b
     });
alert(result)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста вычислить общую сумму katalizator Общие вопросы Javascript 15 22.03.2013 16:26
Пожалуйста помогите сделать проверку выполнения vk Dodik Общие вопросы Javascript 3 01.03.2013 16:49
Помогите пожалуйста правильно написать скрипт raffx Events/DOM/Window 17 16.10.2012 20:31
Помогите пожалуйста не могу вывести информацию из mysql Геворг Серверные языки и технологии 4 01.03.2011 20:24
помогите пожалуйста с скриптиком Len4ik Javascript под браузер 2 30.04.2010 20:10