如何在Immutable.js中设置深层嵌套的值?

Mat*_*ert 43 javascript immutable.js

使用纯JavaScript对象时,可以轻松更改深层嵌套的对象属性:

people.Thomas.nickname = "Mr. T";
Run Code Online (Sandbox Code Playgroud)

但是对于Immutable,我必须在拥有一个新的人物对象之前浏览每个属性的祖先:

var thomas = peopleImmutable.get("Thomas");
var newThomas = thomas.set("nickname", "Mr .T");
peopleImmutable = peopleImmutable.set("Thomas", newThomas);
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来写这个?

Mat*_*ert 64

Immutable中的地图有一个setIn方法,可以轻松设置深度值:

peopleImmutable = peopleImmutable.setIn(["Thomas", "nickname"], "Mr. T");
Run Code Online (Sandbox Code Playgroud)

或者,split用于生成数组:

peopleImmutable = peopleImmutable.setIn("Thomas.nickname".split("."), "Mr. T");
Run Code Online (Sandbox Code Playgroud)

  • 另请查看`update`和`updateIn`的文档,而不是`value`参数接受一个函数参数,该参数将当前值作为参数传递.所以你可以做一些像'peopleImmutable.updateIn(["Thomas","isAwesome"],value =>!value) (3认同)