如何使用扩展语法返回对象并覆盖引用数组的属性

时间:2018-06-12 16:02:01

标签: javascript react-native ecmascript-6 redux

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

1 个答案:

答案 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())




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