Как да намерите най-често срещания елемент от масива? [Updated]

Хората се оплакаха от проблеми с производителността със стар метод и затова актуализирах тази статия до най-ефективния метод, използвайки hashmap.

Как да намерите най-честия елемент от масив в JavaScript? Нещо, за което много разработчици се надпреварват да открият. Въпреки че има много решения там, но повечето от тях са твърде сложни и трудни за разбиране.

Хората търсят:
Как да,,,
 „Вземете елемента с най-голямо срещане в масив“
„Вземете елемента, който се появява най-много пъти в масив“
„Напишете функция, за да намерите броя на най-честите елементи от масива“

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

И така, днес ще покажа точно това. „Така че нека започнем“

Етап 1

Първо трябва да създадем масив.

var cats = ['Tom', 'Fluffy', 'Tom', 'Bella', 'Chloe', 'Tom', 'Chloe'];

Сега имаме своя масив от котки.

Стъпка 2

Нуждаем се от функция, която ще приеме масива ни като аргумент и ще извърши изчислението, Запомнете! ние също можем да направим всички изчисления без функция, всичко това е само въпрос на предпочитание. В този пример минавам с iife (веднага се извиква израз на функция).

(Функция (масив) {
  // код влиза тук
}) ();

Стъпка 3

Сега ще създадем три (3) променливи, една за съхранение на нашата хешмап, друга за сравняване на стара стойност със следваща стойност и последна за съхранение на последната най-честа стойност в масива.

(Функция (масив) {
  var count = {}; // Тук ще броим появата на елемент
  var сравнение = 0; // Ще сравним използвайки запаметена стойност
  var mostFrequent; // Ще съхраняваме най-често срещания артикул
}) ();

Стъпка 4

Сега е време да направим цикъл вътре в нашата функция, за да извършим всички изчисления.

// дължина на кеширане в променлива len
за (var i = 0, len = cats.length; i 
      ако (брои [дума]> сравни) {// брои [дума]> 0 (за първи път)
         сравнение = брои [дума]; // задаване на сравнение с числа [word]
         mostFrequent = котки [i]; // задайте mostFrequent стойност
      }
 }

Ако кодът по-горе е сложен за някои от вас, тогава позволете ми да го обясня.

  1. Първо, започваме цикъл, който работи толкова дълго, колкото „i - е по-малък от дължината на котешки масив“.
  2. След това вътре в този цикъл запазваме първи елемент от масив котки в променлива 'word'. Сега ние проверяваме дали counts object има елемент, независимо от каква стойност се съхранява в word, ако не съществува, задаваме counts [word] стойност на 1.
    Например:
    Ако, word = "Tom", тогава се отчита ["Tom"] = 1; ще бъде зададено, ако не съществува брой [word].
  3. Сега, в следващата итерация, ако има отброяване [„Том“], увеличаваме стойността му с 1, което ще бъде като брои [„Том“] = брои [„Том“] + 1;
    изход:
    [брои [„Том“] стойността е 1 сега, ,,,
    брои [„Том“] = 1 + 1; Сега обектът ще изглежда така: {Tom: 2}
  4. Сега в следващата итерация, Ако counts [„Fluffy“] не съществува, тя ще изведе „undefined“, което означава, ако условието е вярно и ще го добави в обекта за броене.
    изход:
    брои [„Fluffy“] = 1;
    Сега обектът ще изглежда като ,,, counts = {Tom: 2, Fluffy: 1};
  5. Същият процес ще се повтори за всеки елемент, ако не съществува, добавете го и ако съществува, увеличете стойността му с 1.
  6. Сега нека да поговорим за секунда if изявление.
  7. На второ място, ако оператор, Ние проверяваме, ако бройките [word] са по-големи от стойността за сравнение, която е „0“ в началото на нашия цикъл.
  8. Така че, тъй като count ["Tom"] ще изведе "2" и "2" е по-голям от 0, условието ще бъде вярно и кодът вътре, ако операторът ще се изпълни.
  9. Вътре ако оператор, Ние проверяваме, ако брои [word] ,,, counts ["Tom"]> 0, след това задаваме стойността на сравнение с counts ["Tom"], ,,, В момента, както знаем, се отчита ["Tom" ] е „2”.
  10. Така че „2“ ще се съхранява в променлива сравнение.
  11. И в mostFrequent променлива ние сме името на елемент, което е по-голямо от сравнение.
  12. Сега в следващата итерация проверяваме дали числото [„Fluffy“] е по-голямо от сравнение ,,, Тук сравняващата стойност е „2“.
  13. Така че, ако count ["Fluffy"] е "3" сега, ,, стойност за сравнение ще бъде зададена на "3" и тъй като "Fluffy" е по-голяма от сравнение. "Fluffy" ще се съхранява в mostFrequent променлива.

Този процес ще се повтаря, докато цикълът с променлива „i“ не успее.

В края ще получим нашата най-често срещана стойност на артикула в променлива mostFrequent. това ще изглежда така ,,,

mostFrequent = 3

Сега всичко, което трябва да направим, е да проверим какво се съхранява в променливата mostFrequent.

console.log (котки [mostFrequent]);

Стъпка 5

Заключителното парче позволява да увием целия си контур в iife - (веднага се извиква израз на функция).

var cats = ['Tom', 'Fluffy', 'Tom', 'Bella', 'Chloe', 'Tom', 'Chloe'];
var count = {};
var сравнение = 0;
var mostFrequent;
(Функция (масив) {
   за (var i = 0, len = array.length; i  сравни) {
             сравнение = брои [дума];
             mostFrequent = котки [i];
       }
    }
  върнете повечето Често;
}) (котки);
Забележка: Промених cat.length на array.length, защото сега това е аргументът ни за функция, равен на нашия котешки масив.

Добре, това е ,,, Ето как можете да намерите най-често срещания елемент в масива.

Производителност?? Е, тествах този пример с друг пример, който използва намаляване, за да постигне същите резултати, но този метод е по-ефективен от намаляване, въпреки че постигат същите резултати.

Проверете тестовия случай за ефективност тук: Щракнете тук

Ако горният пример все още е сложен, не се колебайте да се коментирате или да се свържете с мен чрез || Twitter: @AmJustSam

Освен това, ако не сте чели предишната ми статия за вертикално центриране в CSS, ето тук връзката - Щракнете тук

Ако ви харесва съдържанието, моля, не се колебайте да препоръчате тази статия на други хора, за да могат и другите да се възползват от нея!