Ищете элегантный / краткий способ построения таблицы ha sh в JavaScript (ie, частоты) - PullRequest
1 голос
/ 02 марта 2020

Я ищу краткий способ построить таблицу ha sh из массива (чисел) в JavaScript.

(Это много, по крайней мере, для многих те проблемы типа O (n ^ 2), которые можно было бы оптимизировать для выполнения за один проход, например, проблемы с алгоритмом типа Leetcode.

Кажется, что это может быть краткая однострочная строка. .. Но вот две строки из того, что у меня есть:

const freq = {}; // An Object is often used to implement a Hash Table in JavaScript
nums.forEach(num => freq[num] = freq[num] === undefined ? 1 : freq[num] + 1);

... Предполагается, что nums - это Array<number>, а freq представляет концептуальную структуру табличных данных ha sh, например:

const nums = [2, 0, 2, 0, 0, 3, 0, 2, 0, 1];
// freq == { '0': 5, '1': 1, '2': 3, '3': 1 }

Кто-нибудь знает более синтаксически лаконичный способ достижения этого?

1 Ответ

2 голосов
/ 02 марта 2020

Вы можете сделать это с помощью reduce и некоторых операторов запятой (ab), но я, честно говоря, не могу придумать вескую причину для , :-) Это выглядит так:

const freq = nums.reduce((acc, num) => (acc[num] = (acc[num] || 0) + 1, acc), {});

Live Пример:

const nums = [2, 0, 2, 0, 0, 3, 0, 2, 0, 1];
const freq = nums.reduce((acc, num) => (acc[num] = (acc[num] || 0) + 1, acc), {});
console.log(freq);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...