Как подсчитать значения во вложенном массиве с помощью Lodash?

#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 }, {})