@InsaneRavenGod

Как изменить состояние полей в массиве объектов, которые совпадают с id'шниками в другом массиве?

Есть два массива:

//  1 массив
const [cells, setCells] = useState([
    { id: 1, selected: false, disabled: false, win: false, lose: false },
    { id: 2, selected: false, disabled: false, win: false, lose: false },
    { id: 3, selected: false, disabled: false, win: false, lose: false },
    { id: 4, selected: false, disabled: false, win: false, lose: false },
    { id: 5, selected: false, disabled: false, win: false, lose: false },
  ]);

// 2 массив
const arr = [1, 4];


Как можно обновить все поля win в массиве №1, id которых совпадает с id в массиве №2?

Чтобы в итоге получилось следующее:

const [cells, setCells] = useState([
    { id: 1, selected: false, disabled: false, win: true, lose: false },
    { id: 2, selected: false, disabled: false, win: false, lose: false },
    { id: 3, selected: false, disabled: false, win: false, lose: false },
    { id: 4, selected: false, disabled: false, win: true, lose: false },
    { id: 5, selected: false, disabled: false, win: false, lose: false },
  ]);
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
@WAR_VIK
Нужно во вложенном цикле каждый элемент первого массива с полем id сравнить с элементами второго массива и если они равны, то присвоить элементу первого массива с полем win = true. Примерно так:
for(let ob of arr) {
    for(let el of arr2) {
        if(ob.id === el) ob.win = true;
    }
}
console.log(arr);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Seasle
@Seasle Куратор тега React
setCells((current) => current.map((entry) => ({
    ...entry,
    win: arr.includes(entry.id)
})));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы