Доблесть Buscar mas populares en array JavaScript

Como puedo modificar esta funcion para que en lugar de mostrarme el valor mas, популярный меня muestre Лос 3 доблести mas populares, подставьте populares меня refiero Лос доблесть que mas se repiten en el array.

Funcion

function mode(array)
{
    if(array.length == 0)
        return null;
    var modeMap = {};
    var maxEl = array[0], maxCount = 1;
    for(var i = 0; i < array.length; i++)
    {   
        var el = array[i];
        
        if(modeMap[el] == null){
            modeMap[el] = 1;6
          }else{
            modeMap[el]++;  
          }
        if(modeMap[el] > maxCount)
        { 
            maxEl = el;
            maxCount = modeMap[el];
        }
    }
    return maxEl;
}

Ejemplo de array

["PHP", "Joomla", "PHP", "PHP", "PHP", "Joomla", "PHP", "PHP", "Joomla", "Wordpress", "PHP", "PHP", "Joomla", "Joomla", "PHP", "Joomla", "PHP", "Joomla", "PHP", "Joomla", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "NodeJS", "Joomla", "PHP"]0: "PHP"1: "Joomla"2: "PHP"3: "PHP"4: "PHP"5: "Joomla"6: "PHP"7: "PHP"8: "Joomla"9: "Wordpress"10: "PHP"11: "PHP"12: "Joomla"13: "Joomla"14: "PHP"15: "Joomla"16: "PHP"17: "Joomla"18: "PHP"19: "Joomla"20: "PHP"21: "PHP"22: "PHP"23: "PHP"24: "PHP"25: "PHP"26: "NodeJS"27: "Joomla"28: "PHP"length: 29__proto__: Array[0]
1
задан 31.03.2017, 20:47
1 ответ

, Поскольку я могу изменять эту funciГіn для того, чтобы вместо того, чтобы показывать мне самую популярную стоимость, он показал мне 3 стоимость mГЎs популярные

, Вместо того, чтобы ты изменил funciГіn, я буду предлагать новость.

, Чтобы получать результат, что ты ищешь podrГ-туз делать это:

  • Давайте Верить в объект (hash), где мы принесем счет количества раз, которое появляется valor в договоренности.

  • С .forEach() мы пробегаем договоренность и в hash счет появлений.

  • Потом с Object.keys, мы получаем договоренность с ключами hash и с mГ©todo .sort мы упорядочиваем договоренность.

таким образом, obtendrГЎs один array с аккуратными valores descendentemente segГєn количество появлений в array инициал.

AsГ - например:

function mode(array) {
  var hash = {};
  // Contamos ocurrencias
  array.forEach(function(value) {
    hash[value] = hash[value] || 0;
    hash[value]++;
  });
  return Object.keys(hash)
    // Ordenamos el hash
    .sort(function(a, b) {
      return hash[b] - hash[a];
    });
}


var array = ["PHP", "Joomla", "PHP", "PHP", "PHP", "Joomla", "PHP", "PHP", "Joomla", "Wordpress", "PHP", "PHP", "Joomla", "Joomla", "PHP", "Joomla", "PHP", "Joomla", "PHP", "Joomla", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "NodeJS", "Joomla", "PHP"];
console.log(JSON.stringify(mode(array)));
// Solo los ultimos 3
console.log(JSON.stringify(mode(array).slice(0, 3)));

//UPDATE

, Если ademГЎs necesitarГЎs каково знание número de ocurrencias каждых valor, podrГ-схвати делать это asГ-:

  • С .reduce() мы пробегаем договоренность и получаем один array из object, где каждые object у него есть свойства value (стоимость в array инициал) и count (количество происшествий).

function mode(array) {
  var hash = {};
  return array
    // Contamos ocurrencias
    .reduce(function(result, value) {
      if (hash[value] === undefined) {
        hash[value] = result.length;
        result.push({
          value: value,
          count: 0
        });
      }
      result[hash[value]].count++;
      return result;
    }, [])
    // Ordenamos el hash
    .sort(function(a, b) {
      return b.count - a.count;
    });
}


var array = ["PHP", "Joomla", "PHP", "PHP", "PHP", "Joomla", "PHP", "PHP", "Joomla", "Wordpress", "PHP", "PHP", "Joomla", "Joomla", "PHP", "Joomla", "PHP", "Joomla", "PHP", "Joomla", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "NodeJS", "Joomla", "PHP"];
console.log(JSON.stringify(mode(array)));
// Solo los ultimos 3
console.log(JSON.stringify(mode(array).slice(0, 3)));
4
ответ дан 24.11.2019, 10:16
  • 1
    Он podrí в añ adir for для того, чтобы он напечатал не только три стоимость, которая повторяется, если не tambié n разы, которые повторяет вышеупомянутая стоимость. – Dev. Joel 31.03.2017, 22:21
  • 2
    @Dev. Джоэл в действительности подает меня больше также как и будь, потому что это, чтобы показывать категории, наиболее использованные в моем сайте;) – Santiago D'Antuoni 31.03.2017, 22:31
  • 3
    Для этого случая помоги для того, что он хочет реализовать. Но в другого пользователя было возможно, что ему интересно получать tambié n количество. Одинокой является recomendació n. – Dev. Joel 31.03.2017, 22:55
  • 4
    @Dev. Джоэл, я добавил в моем ответе другой opció n, чтобы покрывать твой комментарий. – Marcos 31.03.2017, 23:07
  • 5
    Превосходный ответ – amenadiel 01.04.2017, 00:38

Теги

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