如何将js数组中对象的属性值相等的对象组合成一个新的数组元素,然后返回一个新的数组?-灵析社区

无敌英俊大师兄

你可以看看是否满足你需求,reduce的别样用法 算了,我更新一下,直接给groupId取掉了,你看第二次的,第一次我还保留 const arr = [ { title: '标题1', url: 'url', groupId: -1 }, { title: '标题2', url: 'url', groupId: 123 }, { title: '标题3', url: 'url', groupId: 123 }, { title: '标题333', url: 'url', groupId: 123 }, { title: '标题4', url: 'url', groupId: -1 }, { title: '标题5', url: 'url', groupId: 456 }, { title: '标题6', url: 'url', groupId: 456 }, ] const res = arr.reduce((previous, current) => { const len = previous.length const last = len && previous[len - 1] if (last.groupId === current.groupId) { // 如果标题4上面还有一个groupId为123的走这个 if (last.group) { last.group.push({ ...current }) } else { previous[len - 1] = { groupId: last.groupId, group: [{ ...last }, { ...current }] } } } else { previous.push(current) } return previous }, []) console.log(res) /* [ { "title": "标题1", "url": "url", "groupId": -1 }, { "groupId": 123, "group": [ { "title": "标题2", "url": "url", "groupId": 123 }, { "title": "标题3", "url": "url", "groupId": 123 }, { "title": "标题333", "url": "url", "groupId": 123 } ] }, { "title": "标题4", "url": "url", "groupId": -1 }, { "groupId": 456, "group": [ { "title": "标题5", "url": "url", "groupId": 456 }, { "title": "标题6", "url": "url", "groupId": 456 } ] } ] */ \-----第二次----- const arr = [ { title: '标题1', url: 'url', groupId: -1 }, { title: '标题2', url: 'url', groupId: 123 }, { title: '标题3', url: 'url', groupId: 123 }, { title: '标题333', url: 'url', groupId: 123 }, { title: '标题4', url: 'url', groupId: -1 }, { title: '标题5', url: 'url', groupId: 456 }, { title: '标题6', url: 'url', groupId: 456 }, ] const res = arr.reduce((previous, current) => { const len = previous.length const last = len && previous[len - 1] if (last.groupId === current.groupId) { // 如果标题4上面还有一个groupId为123的走这个 if (last.group) { const { groupId: _2, ...currentData } = current last.group.push({ ...currentData }) } else { const { groupId: _1, ...firstData } = last const { groupId: _2, ...currentData } = current previous[len - 1] = { groupId: last.groupId, group: [{ ...firstData }, { ...currentData }] } } } else { if (current.groupId === -1) delete current.groupId previous.push(current) } return previous }, []) console.log(res) /* [ { "title": "标题1", "url": "url"}, { "groupId": 123, "group": [ { "title": "标题2", "url": "url" }, { "title": "标题3", "url": "url" }, { "title": "标题333", "url": "url" } ] }, { "title": "标题4", "url": "url" }, { "groupId": 456, "group": [ { "title": "标题5", "url": "url" }, { "title": "标题6", "url": "url" } ] } ] */

阅读量:1

点赞量:0

问AI