Вы должны использовать некоторую форму хэша, чтобы выполнить итерацию только один раз в коллекции строк перед рассмотрением любого из запросов.ES6 Map
может использоваться для этой цели.
Тогда для каждой записи в хэше у вас будет счетчик частоты (подсчитанный с помощью reduce
).
Одна идея - не просто вернутьэтот хеш, но возвращает функцию, которая обращается к хешу и возвращает соответствующую частоту или 0, если его нет в этом хеш-коде.
Вот как это будет выглядеть:
// Returns function that can answer queries for the given collection of strings
function freq(strings) {
const counts = strings.reduce((map, s) => map.set(s, (map.get(s)||0)+1), new Map);
return s => counts.get(s) || 0;
}
// Sample call. The 3 queries are fed into the function returned by freq
const results = ["wer", "tyu", "uio"].map(freq(["wer", "wer", "tyu", "oio", "tyu"]));
console.log(results);