如何修改我的脚本,所以结果没有关键的“作者”(我只想有歌曲和地点)? 歌曲列表看起来是这样的(显然我没有复制整个列表)
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
}
],
答案 0 :(得分:1)
使用Array.reduce()
或lodash的_.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()
映射这些组,并将项目映射为省略 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>