使用纯JavaScript对象时,很容易更改深层嵌套的对象属性:

people.Thomas.nickname = "Mr. T";

但是对于不可变对象(immutable对象),我必须先遍历每个属性的祖先,然后再创建新的人员对象:
var thomas = peopleImmutable.get("Thomas");
var newThomas = thomas.set("nickname", "Mr .T");
peopleImmutable = peopleImmutable.set("Thomas", newThomas);

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

最佳答案

不可变的 map 具有setIn method,可以轻松设置深层值:

peopleImmutable = peopleImmutable.setIn(["Thomas", "nickname"], "Mr. T");

或者,使用split生成数组:
peopleImmutable = peopleImmutable.setIn("Thomas.nickname".split("."), "Mr. T");

10-06 00:30