Как использовать синтаксис распространения для возврата объекта и перезаписи свойства, ссылающегося на массив - PullRequest
0 голосов
/ 12 июня 2018

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 голосов
/ 12 июня 2018

Это можно сделать с помощью 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())

Таким образом, вы используете исходный массив и заменяете только те элементы, которые должны быть изменены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...