如何在Immutable.js中设置一个深度嵌套的值?

How can I set a deeply nested value in Immutable.js?

本文关键字:深度 一个 嵌套 Immutable js 设置      更新时间:2023-09-26

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

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

但是对于Immutable,我必须在创建新的people对象之前遍历每个属性的祖先:

var thomas = peopleImmutable.get("Thomas");
var newThomas = thomas.set("nickname", "Mr .T");
peopleImmutable = peopleImmutable.set("Thomas", newThomas);

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

Immutable中的map有一个setIn方法,可以方便地设置深度值:

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

或者,使用split生成数组:

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