Javascript 不可变js映射填充
我正在尝试填充一个不可变的JS映射。 给定一个字段数组和一个表单,例如Javascript 不可变js映射填充,javascript,immutable.js,Javascript,Immutable.js,我正在尝试填充一个不可变的JS映射。 给定一个字段数组和一个表单,例如 {form: 'Register', fields: ['name','firstname']} 我想得到的是: { form : { name: { value: '', hasFeedback: false }, firstname: { value: '',
{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);
谢谢,我不确定fromJS()是否正确。也许我会对我的代码进行基准测试!