Node.js ImmutableJS:在数组中更新对象

Node.js ImmutableJS:在数组中更新对象,node.js,redux,immutable.js,Node.js,Redux,Immutable.js,我的情况有点复杂,如下所示: array: array: object, object, etc... array: etc... 简单地说,一个数组包含许多包含对象的数组。 我试图根据Id在这个混乱中找到其中一个对象,并对其进行更新(即将一个完整的值设置为true),但到目前为止还无法找到。使用Mudash,我设法找到了这个对象,但我不知道如何再次传递它以返回它,我的代码如下: return state.update('data', (arr) =&g

我的情况有点复杂,如下所示:

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;
  });
有什么简单的方法可以做到这一点吗?
谢谢。

如果你问的是如何变异一个不可变对象的一部分,那么就不会有让你满意的答案。有关更多详细信息,请参见此答案:


这里的关键是不能在适当的位置对值进行变异。相反,您必须从思考如何更改深度嵌套数据结构中的每个父值来解决问题

只需简单地使用u.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;
    });
  });
});

这是一个优雅的解决方案。谢谢:)