使用React Immutability helper或Immutable js反映合并不可变对象数组

时间:2015-12-08 19:09:01

标签: javascript arrays merge reactjs immutable.js

我正在尝试使用Reacts Immutability helper或Immutable js合并一个不可变的对象数组。我正在尝试创建名称已更改的唯一记录列表。我试图避免在提交前多次更改名称时在列表中创建重复项,这使我相信合并是我需要采取的路径。我想要实现的一个例子如下。

 var objArray = [{id:4, name:'bar'}, {id:10, name:'test'}];
 var newObj = {id:4, name:'foo'};

 var updatedEntries = update(this.state.nameChanges, {$merge: {newObj});

我正在寻找的结果是:

 objArray = [{id:4, name:'foo'}, {id:10, name:'test'}]

我似乎得到的结果是:

 objArray = [{id:4, name:'foo'}]

我尝试使用Facebook React不变性助手,但似乎无法获得我需要的结果。我似乎在尝试围绕合并功能实际执行的操作时遇到了一些麻烦。任何帮助表示赞赏。

由于

1 个答案:

答案 0 :(得分:2)

你几乎就在那里,你需要做的是首先过滤掉你想要的对象,然后通过merge中的索引使用objArrayofficial docs显示了如何执行此操作

var objArray = [{id: 4, name: 'bar'}, {id: 10, name: 'test'}];

var i = -1;
objArray.map(function (obj, index) {
  if (obj.name === 'bar') i = index;
});

var mergeObject = {};
mergeObject[i] = {$merge: {name: 'Foo'}};

var newState = update(objArray, mergeObject);

>>  [[object Object] {
  id: 4,
  name: "Foo"
}, [object Object] {
  id: 10,
  name: "test"
}]