在javascript中过滤对象数组

我正在使用 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++){



         }


红颜莎娜
浏览 213回答 3
3回答

湖上湖

首先,这不称为过滤。它被称为分组。您可以按以下步骤执行此操作:首先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}) => {&nbsp; if(!ac[id]) ac[id] = {id,postedUserId,postedUsers:[],...rest};&nbsp; ac[id].postedUsers.push(postedUserId);&nbsp; 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++){&nbsp; let {id,postedUserId,...rest} = arr1[i];&nbsp; if(!res[id]) res[id] = {id,postedUserId,postedUsers:[],...rest};&nbsp; res[id].postedUsers.push(postedUserId);}console.log(Object.values(res))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript