使用JavaScript不变性助手或{…data,}更新数据收集中一条记录的一个字段

使用JavaScript不变性助手或{…data,}更新数据收集中一条记录的一个字段,javascript,reactjs,immutability,Javascript,Reactjs,Immutability,我有以下数据: var data = [ {field1: 'a', field2: 'aa', field3: 1}, {field1: 'b', field2: 'bb', field3: 2}, {field1: 'c', field2: 'cc', field3: 3}, {field1: 'd', field2: 'dd', field3: 4}, ] 我试图使用不变性助手或React{…data,}构造来获得以下结果:我需要找到带有field2val

我有以下数据:

var data = [
    {field1: 'a', field2: 'aa', field3: 1},
    {field1: 'b', field2: 'bb', field3: 2},
    {field1: 'c', field2: 'cc', field3: 3},
    {field1: 'd', field2: 'dd', field3: 4},
]

我试图使用不变性助手或React
{…data,}
构造来获得以下结果:我需要找到带有
field2
value
'cc'
的行(一个或多个),并将其
field3
设置为
5
。我可以使用什么代码?

您可以使用纯JavaScript来实现这一点:

data.map(d => d.field2 === 'cc' ? ({...d, field3: 5}) : d);

解释发生了什么:这将创建一个新数组,其中每个元素都是原始数组中元素的投影。如果符合条件,将根据您的要求创建和修改对象的副本。如果不匹配,则按原样将其放置在数组中。

您可以使用纯JavaScript进行此操作:

data.map(d => d.field2 === 'cc' ? ({...d, field3: 5}) : d);

解释发生了什么:这将创建一个新数组,其中每个元素都是原始数组中元素的投影。如果符合条件,将根据您的要求创建和修改对象的副本。如果不匹配,则按原样将其放置在数组中。

您可以使用简单的javascript函数

var data=[{field1:'a',field2:'aa',field3:1},{field1:'b',field2:'bb',field3:2},{field1:'c',field2:'cc',field3:3},{field1:'d',field2:'dd',field3:4}];
/*使用…o创建对象的副本并更新复制对象中的值*/
var result=data.map(o=>Object.assign({…o},{field3:o.field2=='cc'-5:o.field3}));

控制台日志(结果)您可以使用简单的javascript函数

var data=[{field1:'a',field2:'aa',field3:1},{field1:'b',field2:'bb',field3:2},{field1:'c',field2:'cc',field3:3},{field1:'d',field2:'dd',field3:4}];
/*使用…o创建对象的副本并更新复制对象中的值*/
var result=data.map(o=>Object.assign({…o},{field3:o.field2=='cc'-5:o.field3}));
控制台日志(结果)您可以在一种不变的方法中使用如下Javascript:

var数据=[
{field1:a',field2:aa',field3:1},
{field1:b',field2:bb',field3:2},
{field1:c',field2:cc',field3:3},
{field1:d',field2:dd',field3:4},
]
var newData=数据减少((累加器,obj)=>{
返回累加器.concat((obj.field2=='cc'?{…obj,field3:5}:obj));
}, []);
console.log(newData)您可以在一种不变的方法中使用如下Javascript:

var数据=[
{field1:a',field2:aa',field3:1},
{field1:b',field2:bb',field3:2},
{field1:c',field2:cc',field3:3},
{field1:d',field2:dd',field3:4},
]
var newData=数据减少((累加器,obj)=>{
返回累加器.concat((obj.field2=='cc'?{…obj,field3:5}:obj));
}, []);

console.log(newData)我更正了示例我更正了示例