let array = [{id: 3, value: 18},{id: 4, value: 20}]
let state = {array, someOtherProperty: [1,2,3]}
function f(){
return {...state, state.array.find(x=>x.id === 3)['value']: 20}
}
console.log(f())
基本上尝试将值18替换为20,其中id = 3,并保留state
的所有其他属性。在这种情况下不确定如何使用扩展语法
预期输出如下:
state = {
array: [{id:3, value:20}, {id:4, value: 20}],
someOtherProperty: [1,2,3]
}
答案 0 :(得分:2)
您可以通过以下方式使用map
来实现这一目标:
let array = [{
id: 3,
value: 18
}, {
id: 4,
value: 20
}]
let state = {
array,
someOtherProperty: [1, 2, 3]
}
function f() {
return { ...state,
array: array.map(item => item.id === 3 ? { ...item,
value: 20
} : item)
}
}
console.log(f())

这样您就可以使用原始数组并仅替换必须更改的元素。