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

Предыдущая статьяКак начать работать программистом почти без опыта
Следующая статьяЯ ухожу из Google. Что же такое Google Cloud на самом деле?