如何使用 Immutable JS Map.setIn 在 Map 中创建深度嵌套的列表?

How can i create deeply nested List in Map using Immutable JS Map.setIn?

我需要在某个时候使用 Map.setIn 方法创建列表。问题是,当我在路径中指定索引时,它不理解我正在使用 List。以下示例不起作用:

let data = new Map().setIn(['person', 'products', 0, 'isAvailable'], true);
List.isList(data.getIn(['person', 'products'])) // Returns false because it is Map instance

那么,我如何告诉 Immutable JS 'products' 在我的例子中 must 是 List 而不是 Map?在我的例子中,我无法初始化 Map,因为结构非常动态,路径可能会有所不同。

您提供的上述语法是正确的,但前提是 "person.products" 已经是一个列表。例如

// In this example, `products` won't be a list
(new Map()).setIn(['person', 'products', 1, 'isAvailable'], true)


// In this example, `products` will be a list
var initial = new Map({
  person: {
    name: '',
    products: [{isAvailable: true}, {isAvailable: false}]
  }
})

initial.setIn(['person', 'products', 1, 'isAvailable'], true)

这是我能找到的唯一解决方案。

您始终可以编写自己的 setIn 函数来查找整数并将值设置为 new List()