Считаем слова в массиве
Дано:
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