不可变js地图填充

Immutable js Map population

本文关键字:填充 地图 js 不可变      更新时间:2023-09-26

我试图填充一个不可变的JS地图。给定一个字段数组和一个表单,例如

{form: 'Register', fields: ['name','firstname']}

我想要得到这样的东西:

{ form :
        { name: {
               value: '',
               hasFeedback: false
              },
          firstname: {
                value: '',
               hasFeedback: false
              }
        }
}

我的当前代码:

let newState = state;   
fields.forEach((field) => {
      newState = newstate.setIn([form, field, 'value'], '');
      newState = newstate.setIn([form, field, 'hasFeedback'], false);
    });     
return newState;

我对整个不可变的东西很陌生:这是填充不可变映射的正确方式吗?我违反了不变性的惯例吗?这是最优雅的方式吗?

我不知道有什么约定,但最好先创建所需的结构,然后使用Immutable.fromJS进行转换。像现在这样一个接一个地应用突变,会产生一些不必要的开销。

可能重构的代码:

var form = fields.reduce((acc, f) => {
        acc.form[f] = {
            value: '',
            hasFeedback: false
        };
        return acc;
    }, {form: {}});
var immutableForm = Immutable.fromJS(form);