0

Given:

const data = [
  { user: "user1", data: "data11" },
  { user: "user1", data: "data12" },
  { user: "user1", data: "data13" },
  { user: "user2", data: "data21" },
  { user: "user2", data: "data22" }
];

const output = _(data).groupBy('user')
      .map((vals, key) => ({ 'user': key, 'data': _.take(vals, 'data')}))
      .value();

console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

How to get output like this by lodash _.groupBy :

const output = [{user:'user1',data:['data11','data12','data13']},
                {user:'user2',data:['data21','data22']}]

Thanks!

RoToRa
  • 37,635
  • 12
  • 69
  • 105
Jerry
  • 329
  • 1
  • 4
  • 13

1 Answers1

1

You've almost got it. Lodash's _.take() method is used to slice the first n items from an array of items. Instead, you want to _.map your array of grouped objects to an array of data strings by "extracting" data attribute from each object. This can be done using _.map(vals, 'data'). See example below:

const data = [
  { user: "user1", data: "data11" },
  { user: "user1", data: "data12" },
  { user: "user1", data: "data13" },
  { user: "user2", data: "data21" },
  { user: "user2", data: "data22" }
];

const output = _(data).groupBy('user')
      .map((vals, user) => ({ user, 'data': _.map(vals, 'data')})).value();

console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Nick Parsons
  • 45,728
  • 6
  • 46
  • 64