如何使用Immutable JS Map.setIn在Map中创建深层嵌套List?

时间:2016-07-07 20:13:59

标签: javascript immutable.js

我需要使用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'产品'在我的情况下must是列表而不是地图?我不能在我的情况下初始化Map,因为结构非常动态,路径可能会有所不同。

1 个答案:

答案 0 :(得分:2)

您提供的上述语法是正确的,但前提是“person.products”已经是一个列表。 E.G。

// 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()