ImmutableJS - 处理对象列表?

时间:2016-03-14 03:56:22

标签: immutable.js

我正在学习使用ImmutableJS,但我有点困惑。我查看了文档,我看到有数组的对象和列表。

所以我构建了一个像这样的对象: sampleTodo = Immutable.Map({text: 'Testing 1 2 3', status: 'Open'})

然后执行:list = Immutable.List().push(sampleTodo)

不确定这是否正确。如果是的话,当我有索引并且必须返回修改后的List时,我会陷入困境。

例如,如果index为0,我会这样做:

list.get(index)

并获取

Object {size: 1, _root: ArrayMapNode, __ownerID: undefined, __hash: undefined, __altered: false}

所以,我不知道如何通过浏览Mapstatus: "Complete"对象的状态设置为List

2 个答案:

答案 0 :(得分:1)

你可以这样做:

list = list.setIn([index, 'status'], 'Complete')

要理解的关键点是.setIn使用底层数据类型的索引。由于listImmutable.List,我们可以使用整数来查找第一个元素,即Immutable.MapImmutable.Map的“索引”是对象key(字符串),这也是你可以做的原因

list = list.getIn([index, 'status'])获取商品的状态。

答案 1 :(得分:0)

我在这里找到了一个可行的解决方案: https://stackoverflow.com/a/29655323/3281384

list = list.update(
  list.findIndex(function(item) { 
    return item.get("name") === "third"; 
  }), function(item) {
    return item.set("count", 4);
  }
);

或者,在我的情况下,:

list = list.update(
  index, function(todo) {
    return todo.set('status', 'Complete');
  }
);