3 回答
TA贡献2003条经验 获得超2个赞
首先,这不称为过滤。它被称为分组。您可以按以下步骤执行此操作:
首先
reduce()
在数组上使用并将累加器设置为空对象{}
在每次迭代期间
id
,postedUserId
使用解构获取和是单独的变量。并使用扩展运算符获取其余属性。然后检查
id
累加器中是否已经存在当前的项目。如果它在那里,则将其推
postedUserId
送到其postedUsers
数组。如果该键不存在,则将
id
累加器上的键()设置为具有postedUsers
空数组的对象。
var arr1 = [{"name":"harkaran","lname":"sofat","userId":49,"postedUserId":52,"id":21,},{"name":"harkaran","lname":"sofat","userId":49,"postedUserId":57,"id":21,}];
const res = arr1.reduce((ac,{id,postedUserId,...rest}) => {
if(!ac[id]) ac[id] = {id,postedUserId,postedUsers:[],...rest};
ac[id].postedUsers.push(postedUserId);
return ac;
},{})
console.log(Object.values(res))
您在评论中询问了简单for循环,所以这是它的版本。
var arr1 = [{"name":"harkaran","lname":"sofat","userId":49,"postedUserId":52,"id":21,},{"name":"harkaran","lname":"sofat","userId":49,"postedUserId":57,"id":21,}];
let res = {};
for(let i = 0; i<arr1.length; i++){
let {id,postedUserId,...rest} = arr1[i];
if(!res[id]) res[id] = {id,postedUserId,postedUsers:[],...rest};
res[id].postedUsers.push(postedUserId);
}
console.log(Object.values(res))
添加回答
举报