Прежде всего это не называется фильтрацией.Это называется группировка .Вы можете сделать это в следующих шагах:
- Сначала использовать
reduce()
для массива и установить аккумулятор в пустой объект {}
- Во время каждой итерации получать
id
и postedUserId
это отдельная переменная, использующая Destructuring.И используйте оператор распространения, чтобы получить остальные свойства. - Затем проверьте, есть ли уже элемент текущего тока
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))