Перебор массива объектов с изменением поля объекта
Есть два массива
const idArray = ['1', '2']
const userArray = [
{
name: 'vanya',
id: '1',
checked: false
},
{
name: 'kolya',
id: '2',
checked: false
},
{
name: 'nika',
id: '3',
checked: false
}
]
Если в массиве idArray есть id, который есть в массиве userArray, то у нужного user-a необходимо поменять checked на true В итоге должен получиться такой объект:
const resultUserArray = [
{
name: 'vanya',
id: '1',
checked: true
},
{
name: 'kolya',
id: '2',
checked: true
},
{
name: 'nika',
id: '3',
checked: false
}
]
Я пробовал сделать это так
const idArray = ['1', '2']
const userArray = [
{
name: 'vanya',
id: '1',
checked: false
},
{
name: 'kolya',
id: '2',
checked: false
},
{
name: 'nika',
id: '3',
checked: false
}
]
idArray.forEach((id) => {
const resultUserArray = userArray.map((user) => {
if (user.id === id) {
return {
...user,
checked: true
}
}
return user
})
})
console.log(idArray, userArray )
Но у меня получается массив, у которого только в одном объекте поменялось поле checked, а мне необходимо, чтобы оно поменялось в двух объектах. Подскажите пожалуйста как это сделать?
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Возможно, так будет проще (если можно менять исходную структуру):
const idArray = ['1', '2'];
const userArray = [
{
name: 'vanya',
id: '1',
checked: false
},
{
name: 'kolya',
id: '2',
checked: false
},
{
name: 'nika',
id: '3',
checked: false
}
];
for (const user of userArray) {
if(idArray.includes(user.id)) user.checked = true;
}
console.log(userArray);
Но если нужна копия, можно так:
const idArray = ['1', '2'];
const userArray = [
{
name: 'vanya',
id: '1',
checked: false
},
{
name: 'kolya',
id: '2',
checked: false
},
{
name: 'nika',
id: '3',
checked: false
}
];
const resultUserArray = userArray.map(
user => ({...user, checked: idArray.includes(user.id) ? true : user.checked})
);
console.log(resultUserArray);