javascript - 如何在 Lodash 中修改 groupBy 结果
问题描述
如何修改我的脚本,导致没有关键的“作者”(我只想有歌曲和地点)?歌曲列表是这样的(显然我没有复制整个列表)
const lp3 = [
{
author: 'Queen',
song: 'Bohemian Rhapsody',
place: 1,
change: 0
},
{
author: 'Deep Purple',
song: 'Child in time',
place: 2,
change: 2
},
和我的脚本:
const exercise10 = _.groupBy(lp3, "author")
结果是例如:
Pink Floyd': [
{
author: 'Pink Floyd',
song: 'Shine on you crazy diamond',
place: 12,
change: 4
},
{
author: 'Pink Floyd',
song: 'Comfortably numb',
place: 15,
change: 7
},
{ author: 'Pink Floyd', song: 'Hey you', place: 18, change: 11 },
{
author: 'Pink Floyd',
song: 'Another brick in the wall part II',
place: 21,
change: 10
}
],
解决方案
使用Array.reduce()
or lodash's_.reduce()
你可以解构每个对象,取出author
,然后对对象进行分组:
const lp3 = [{"author":"Queen","song":"Bohemian Rhapsody","place":1,"change":0},{"author":"Deep Purple","song":"Child in time","place":2,"change":2}]
const result = _.reduce(lp3, (acc, { author, ...o }) => {
if(!acc[author]) acc[author] = []
acc[author].push(o)
return acc
}, {})
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>
如果要使用_.groupBy()
,您需要对项目进行分组,然后使用 映射组_.mapValues()
,并将项目映射到 omit author
:
const lp3 = [{"author":"Queen","song":"Bohemian Rhapsody","place":1,"change":0},{"author":"Deep Purple","song":"Child in time","place":2,"change":2}]
const result1 = _.mapValues(
_.groupBy(lp3, 'author'),
values => _.map(values, o => _.omit(o, 'author')),
)
// or using chaining
const result2 = _(lp3)
.groupBy(lp3, 'author') // create the groups
.mapValues(values => // map the values of the groups x
_.map(values, o => _.omit(o, 'author')) // map the items
)
.value()
console.log(result1)
console.log(result2)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>
推荐阅读
- javascript - 如何使用 .Net Core 3 实现 UpdatePanel 功能
- c# - 为什么我们默认允许溢出?
- javascript - JavaScript RegExp 捕获组
- python - 无法在 python 中使用 calcbsimpvol 函数找到隐含波动率
- php - PHP/HTML - 需要 form_1 获取用户名,然后提交后转到 form_2,它会记住用户名并打招呼
- python - 在蟒蛇龟上画一个正方形
- linux - 语法错误:预期操作数(错误标记为“+”)
- r - 要在 PDF 类型 RMD 中获得 2 页中的 huxtable
- php - 通过 Laravel 中的任务计划程序通知
- python - 仅自动将表情符号添加到链接的不和谐机器人