#javascript #lodash
Вопрос:
Я пытаюсь вычислить уникальное количество users.hobbies
использования Lodash
. Данные выглядят следующим образом:
var users = [ { 'user': 'barney', 'age': 36, 'hobbies': ['soccer','basketball'] }, { 'user': 'fred', 'age': 40, 'hobbies': ['soccer', 'golf'] }, { 'user': 'tom', 'age': 25, 'hobbies': ['golf'] } ];
Я пытался:
_.countBy(users, 'hobbies'); // { 'soccer,basketball': 1, 'soccer,golf': 1, golf: 1 }
Желаемый результат -:
// { 'soccer':2, 'basketball':1, 'golf':2}
Я предполагаю, что мне понадобится split
значение users.hobbies
, но я не совсем уверен, как его применить.
Комментарии:
1. Воспользуйся:
_.countBy(_.flatten(users.map(u =gt; u.hobbies)))
Ответ №1:
Вы можете сгладить хобби до того, как:
const users = [ { 'user': 'barney', 'age': 36, 'hobbies': ['soccer','basketball'] }, { 'user': 'fred', 'age': 40, 'hobbies': ['soccer', 'golf'] }, { 'user': 'tom', 'age': 25, 'hobbies': ['golf'] } ]; const count = _.countBy(users.flatMap(user =gt; user.hobbies)); console.log(count);
lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"gt;lt;/scriptgt;
Ответ №2:
Не уверен насчет lodash, но вот решение с собственным js
users.reduce((total, el) =gt; { el.hobbies.forEach(el =gt; { if (el in total) total[el] else total[el] = 1 }) return total }, {})