如何通过迭代来更新不可变列表的值

时间:2016-12-17 08:17:25

标签: typescript immutable.js

这里我有一个不可变的列表。我需要将除了id为2的对象之外的所有对象的isReq对象更新为false。

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

2 个答案:

答案 0 :(得分:1)

使用map并添加if-else分支:

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

这里我们使用对象扩展运算符来更新项目,但您也可以使用Object.assign或完全不同的东西。

答案 1 :(得分:0)

我在这里找到了解决问题的方法,但不知道它是否是最佳方法。

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);
            }
        });