I am working on reactjs
[
{
key: 'a',
map: [
{
brand: 'sam',
year: 2015,
models: [
{
pk: 1,
value: 15,
},
{
pk: 2,
value: 20,
},
],
},
{
brand: 'sony',
year: 2016,
models: [
{
pk: 3,
value: 15,
},
{
pk: 4,
value: 20,
},
],
},
],
},
{
key: 'b',
map: [
{
brand: 'nok',
year: 2015,
models: [
{
pk: 1,
value: 15,
},
{
pk: 2,
value: 20,
},
],
},
{
brand: 'folo',
year: 2016,
models: [
{
pk: 3,
value: 15,
},
{
pk: 4,
value: 20,
},
],
},
],
},
]
now my task is user update value of value attribute so I have to update my whole array. I am struggling that do it in immutable way. have written code to update like this way
let groupB = [...this.state.groupB];
const modifiedPrgram = groupB.filter(data => data.brand === obj.brand)
.map(proData => proData.map.filter(filetredData => filetredData.year === this.props.year))
let models=modifiedPrgram[0].map(data => data.models)
var selectedData = models.filter(data => data.pk === obj.pk);
var diff = obj.value - selectedData[0].value;
var otherData = models.filter(data => data.pk !== obj.pk);
var sum = otherData.map(data => data.value).reduce((a, b) => a + b, 0);
for (var i = 0; i < models.length; i++) {
if (models[i].pk !== obj.pk) {
models[i].value =
models[i].value -( models[i].value / sum )* diff;
} else
models[i].value = obj.value;
}
but now confused how to re add that value in my groupB. please suggest me something in this