将js数组中对象的属性值相等的对象组合成一个新的数组元素。
可以使用reduce、map等函数
比如:
// 原始数组
const arr = [
{title: '标题1', url: 'url', groupId: -1},
{title: '标题2', url: 'url', groupId: 123},
{title: '标题3', url: 'url', groupId: 123},
{title: '标题4', url: 'url', groupId: -1},
{title: '标题5', url: 'url', groupId: 456},
{title: '标题6', url: 'url', groupId: 456},
{title: '标题6', url: 'url', groupId: 789},
]
// 期望结果
const resArr = [
{title: '标题1', url: 'url'},
{groupId: 123, group: [{title: '标题2', url: 'url'}, {title: '标题3', url: 'url'}]},
{title: '标题4', url: 'url'},
{groupId: 456, group: [{title: '标题5', url: 'url'}, {title: '标题6', url: 'url'}]}
]
如果 groupId
为-1,则删除其groupId
属性,并按顺序将该元素加入新的数组中即可
另外:arr数组中相同groupId的元素在数组中的位置总是相邻的。(groupId为-1的除外)
比如:
// 正例
const arr = [
{title: '标题1', url: 'url', groupId: -1},
{title: '标题2', url: 'url', groupId: 123},
{title: '标题3', url: 'url', groupId: 123},
{title: '标题4', url: 'url', groupId: -1},
{title: '标题5', url: 'url', groupId: 456},
{title: '标题6', url: 'url', groupId: 456},
{title: '标题4', url: 'url', groupId: -1},
]
// 反例
const arr = [
{title: '标题1', url: 'url', groupId: -1},
{title: '标题2', url: 'url', groupId: 123},
{title: '标题4', url: 'url', groupId: -1},
{title: '标题3', url: 'url', groupId: 123},
{title: '标题5', url: 'url', groupId: 456},
{title: '标题5', url: 'url', groupId: 789},
{title: '标题6', url: 'url', groupId: 456},
]
你可以看看是否满足你需求,reduce的别样用法
算了,我更新一下,直接给groupId取掉了,你看第二次的,第一次我还保留
-----第二次-----