如何使用immutable.js更新数组中的对象

时间:2016-09-01 18:50:48

标签: immutable.js

我希望使用immutable.js

更新数组中的对象

我的对象如下:

{
    location: '',
    cars: [
      {id: 1, color: blue},
      { id: 2, color: red}
    ]
};

在我的代码中,我得到例如car id:2并更改颜色{id:2,color:black}

我现在希望更新索引为1的汽车。

我试过了:

const car = { id: 2, color: black}
updateIn([ 'cars'  ], list => list.push(car));

这只会在最后添加一辆新车。

我可以使用Immutable JS中的哪个函数来更新car id#2。

使用immutable.js

执行此操作的正确方法是什么

2 个答案:

答案 0 :(得分:1)

const car = { id: 2, color: black};
const indexToBeUpdated = 1;
updateIn(["cars", indexToBeUpdated], () => car);

无论索引是什么,都需要将它传递给updateIn方法的第一个参数,即一个数组。

答案 1 :(得分:0)

按条件更新不可变列表中的元素:

const data = fromJS({
    location: '',
    cars: [
      {id: 1, color: blue},
      { id: 2, color: red}
    ]
});

const car = { id: 2, color: black}

const index = data.get(['cars']).findIndex(listItem => {
  // condition here
  return listItem.get('id') === car.id;
});

const new_data = data.setIn(['cars', index], car);