简体   繁体   中英

Aggregate string into Array using _.groupBy in lodash

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!

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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM