React使用React Immutability Helper或immutable js合并对象的不可变数组

React merge immutable array of objects using React Immutability helpers or Immutable js

本文关键字:React 对象 不可变 数组 合并 immutable 使用 Immutability Helper js      更新时间:2023-09-26

我正试图使用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免疫助手,但似乎无法得到我需要的结果。我似乎有点难以理解合并函数的实际作用。感谢您的帮助。

感谢

您就快到了,您需要做的是首先筛选出您想要的对象,然后通过objArray中的索引使用merge。官方文档显示了如何进行

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"
}]