JavaScript

Считаем слова в массиве

Дано:

let array = ['apple', 'orange', 'apple', 'orange', 'apple'];

Задача: посчитать все слова в данном массиве.

Способ №1: используем цикл for

function getWordCount() {
let map = {};

for (let i = 0; i < array.length; i++) {
let item = array[i];
obj[item] = (obj[item] + 1) || 1;
}
return map;
}

getWordCount(array); // { apple: 3, orange: 2 }

Внутри функции, ассоциируйте переменную с пустым объектом (для сбора данных), он будет играть роль карты (map). map будет содержать пары — ключ-значение, а также счётчик слов, без дубликатов. Цикл for перебирает данный массив. Каждый элемент станет ключом внутри карты. Если слово ещё не существует (если карта не содержит свойство), то создаётся новый ключ и ему присваивается значение “1”. Если слово (ключ) уже существует, то к значению прибавляется 1. В конце выводится карта. После того как функция getWordCount() вызвана с данным массивом, она возвращает объект с количеством слов: 3 apples и 2 oranges.

Способ №2: используем метод reduce

function getWordCntRd() {
return array.reduce((prev, nxt) => {
prev[nxt] = (prev[nxt] + 1) || 1;
return prev;
}, {});
}

getWordCntRd(array); // { apple: 3, orange: 2 }

Встроенный в JavaScript метод Array.prototype.reduce() применяет функцию (callback) к каждому значению массива, в результате мы получаем одно выходное значение.

Внутри функции возвращаем массив с применённым методом reduce. Callback-функция, используемая в методе reduce, принимает три аргумента: prev — накопитель, nxt — текущее значение, {} — исходное значение. Данные о парах ключ-значение, будут храниться в {}. Здесь такая же логика, как и в предыдущем способе, с циклом for. Если ключ найден, исходное значение {} работает как карта, создаётся ключ и присваивается 1 в качестве значения. Если слово уже существует как ключ, тогда значение увеличивается на 1. И так далее, пока не переберёт весь массив. Функция возвращает одно значение, с таким же результатом, как и в предыдущем способе: 3 apples и 2 oranges.

Big O (способ нотации)

Оба способа можно представить как O(n).

 

Перевод статьи Esther Park : How to Get the Word Count in an Array Using JavaScript