ImmutableJS:在数组数组

时间:2017-02-13 13:04:29

标签: node.js redux immutable.js

我的状态有点复杂如下:

array:
  array:
    object,
    object,
    etc...
  array:
  etc...

简单地说,一个包含许多保存对象的数组的数组。 我试图根据它的Id在这个混乱中找到这些对象中的一个并更新它(即将完成的值设置为true),但是到目前为止还没有。使用Mudash,我设法找到了这个对象,但我不知道如何再次传递它以返回它,我的代码如下:

  return state.update('data', (arr) => {
    _.forEach(arr, function(item) {
      _.forEach(item, function(elt) {
        if(elt.Id == action.Id) {
          console.log('Item Found');
          elt.set('completed', true);
        }

      });
    });
    return arr;
  });

有一些简单的方法可以实现这一目标吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

如果您正在询问如何改变不可变对象的一部分,那么将无法满足您的答案。有关更多详细信息,请参阅此答案:

答案 1 :(得分:1)

这里的关键是你不能改变价值。相反,您可以通过思考如何更改深层嵌套数据结构中的每个父值来解决问题。

使用_.map方法可以解决这个问题......

const _ = require('mudash')

return _.update(state, 'data', (arr) => {
  return _.map(arr, function(item) {
    return _.map(item, function(elt) {
      if(_.get(elt, 'Id') == action.Id) {
        console.log('Item Found');
        return _.set(elt, 'completed', true);
      }
      return elt;
    });
  });
});