如何使用 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()
我需要在某个时候使用 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()