Задать вопрос
@semki096

Как обновить данные используя setState?

Подобный вопрос уже имеет ответ. Он звучал так - как изменить год.
getInitialState: function() {
  return {
    data: {
      'month' : 'January',
      'day' : '01',
      'year' : '2015'
  };
},

Ответ был такой
this.setState({
    data: {
         ...this.state.data,
         year: '1980'
    }
})


Мой вопрос - как обновить год только в последнем обьекте?
getInitialState: function() {
  return {
    data: [{
      'month' : 'January',
      'day' : '01',
      'year' : '2015'
      },
      'month' : 'January',
      'day' : '01',
      'year' : '2015'
      },
      'month' : 'January',
      'day' : '01',
      'year' : '2015'
      }
  ]
},
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
pterodaktil
@pterodaktil
js developer
this.setState({
  data: [
    ...data.slice(0, data.length - 1),
    { ...data[data.length - 1], year: "2141" }
  ]
});

или гибче
this.setState({
  data: data.map((item, index, source) =>
    index !== source.length - 1 ? item : { ...item, year: "2141" }
  )
});

или справа
this.setState({
  data: data.reduceRight(
    (acc, item, index) => [
      ...acc,
      index !== 0 ? item : { ...item, year: "2141" }
    ],
    []
  )
});

а можно слева
this.setState({
  data: data.reduce(
    (acc, item, index, { length }) => [
      ...acc,
      index !== length - 1 ? item : { ...item, year: "2141" }
    ],
    []
  )
});

а можно пофантазировать
this.setState({
  data: Array.from(
    { length: data.length },
    (n => () => (
      n++, n !== data.length - 1 ? data[n] : { ...data[n], year: "2141" }
    ))(-1)
  )
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы