How to update value of an immutable list by iterating through it

798 views Asked by At

Here I have an immutable list.I need to update isReq object to false for all the objects except the one having the id 2.

[
{
    'id': 1,
    'name': 'Ram',
    'Details': {
        'isReq': true
    }
},
{
    'id': 2,
    'name': 'dev',
    'Details': {
        'isReq': true
    }
},
{
    'id': 3,
    'name': 'joe',
    'Details': {
        'isReq': true
    }
}

]

2

There are 2 answers

0
Intruder On

I got a solution to my problem here, but doesn't know if its the optimal way to do it.

let selectedId = 2;
        let arr = fromJS(
            [{ 'id': 1, 'name': 'Ram', 'Details': { 'isReq': true } },
            { 'id': 2, 'name': 'dev', 'Details': { 'isReq': true } },
            { 'id': 3, 'name': 'joe', 'Details': { 'isReq': true } }]);

        let newarr = arr.map(function (val: any, index: any) {
            if (val.get('id') === selectedId) {
                return val.setIn(['Details', 'isReq'], true);
            } else {
                return val.setIn(['Details', 'isReq'], false);
            }
        });
2
Luka Jacobowitz On

Use map and add an if-else branch:

list.map(item => {
  if (item.id === 2) {
    return item
  } else {
    return { ...item, Details : {isReq': false} }
  }
}

Here we use the object spread operator to update the item, but you could also use Object.assign or something different entirely.