@TERRAN47

В массиве меняется весь массив с объектами?

https://codepen.io/anon/pen/QQamjX
там же описание в css
Задача поменять timeStart на true в указаном времени в массиве из объектов attr
время указывается в time

а получается меняет во всем массиве
вот пример->

заработает если на 10ой стороке
передать на прямую массив но мне так не пойдет массив с редакса получаю

grafik.forEach((elem)=>{
elem.attr = [{"title":"Хамам", "time":"1 час 30 мин", "timeStart":false, "free":true},{"title":"Сауна", "time":"1 час 30 мин", "timeStart":false, "free":true}]
})
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Вы передаете ссылку на один и тот же массив всем элементам массива graffik:
grafik.forEach(elem => {
  elem.attr = attr; 
});


Когда передаете напрямую, срабатывает именно потому, что каждый раз создаете новый массив с новыми объектами.

Вам надо передавать копии массива с копиями вложенных объектов. Сделать это можно так:
grafik.forEach(elem => {
  elem.attr = attr.map(el => ({ ...el }));
});

Либо, если не используете spread оператор:
grafik.forEach(elem => {
  elem.attr = attr.map(el => Object.assign({}, el));
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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