为了账号安全,请及时绑定邮箱和手机立即绑定

在javascript中过滤对象数组

在javascript中过滤对象数组

红颜莎娜 2021-06-22 17:01:24
我正在使用 JavaScript 创建一个项目。我在过滤对象数组时遇到了问题:这是数组:var arr1 = [{      "name": "harkaran",      "lname": "sofat",      "userId": 49,     "postedUserId": 52,      "id": 21,    },{      "name": "harkaran",      "lname": "sofat",      "userId": 49,      "postedUserId": 57,      "id": 21,    }]最终数组应如下所示:[{    "name": "harkaran",      "lname": "sofat",      "userId": 49,     "postedUserId": 52,      "id": 21,      postedUsers:[52,57]}] 我正在尝试创建新对象。这是我正在使用的方法。但不知道如何实现这个 var arr =[] let obj = {}        obj['name'] = "";        obj['lname'] = "";        obj['userId'] = "";        obj['postedUserId'] = "";        obj['id'] = "";        obj['postedUsers'] = [];        arr.push(obj);        for(var i=0; i<arr1.length; i++){         }
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

首先,这不称为过滤。它被称为分组。您可以按以下步骤执行此操作:

  • 首先reduce()在数组上使用并将累加器设置为空对象{}

  • 在每次迭代期间idpostedUserId使用解构获取和是单独的变量。并使用扩展运算符获取其余属性。

  • 然后检查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))


查看完整回答
反对 回复 2021-06-24
  • 3 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信