【问题标题】:How to update value of an immutable list by iterating through it如何通过迭代更新不可变列表的值
【发布时间】:2016-12-17 08:17:24
【问题描述】:

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

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

]

【问题讨论】:

    标签: typescript immutable.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 在处理普通的javascript对象时,可以做到,但这里我指的是不可变的
    • 那么您使用的是Immutable.Record 吗?更新更容易:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2020-12-03
      相关资源
      最近更新 更多