Добавление значения в реквизит объекта из массива объектов

#javascript #arrays #reactjs

#javascript #массивы #reactjs

Вопрос:

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

Я пробовал этот код (ниже), но он говорит «TypeError: не удается прочитать свойство ‘country_id’ неопределенного»

 state ={

countryControls: [{

id: null,

country_id: '',
description: '',
city_id: '',
}]
}

addControls () {
var countryControls = this.state.countryControls;
countryControls.push({
id: null,
country_id:countryControls.length > 0 ? 
countryControls[ countryControls.length - 2 ].country_id : '',
description: '',
city_id: '',
});

this.setState({ countryControls: countryControls});
}
 

Я ожидаю, что результатом этого будет что-то вроде:
первый объект в массиве

значение country_id = 5 (вводится пользователем вручную)

второй объект в массиве

значение country_id = 5 (автоматическое значение из последнего ввода пользователя)

Комментарии:

1. Это означает countryControls иметь только 1 элемент.

2. привет, @MaheerAli, сначала да, но есть кнопка добавления, при нажатии на которую будет нажат другой объект, который будет добавлен в этот массив … и этот новый объект должен иметь то же значение реквизита, что и предыдущий.

3. Видите, я добавил ответ. проверьте, работает ли это

Ответ №1:

Когда длина массива будет 1 равна , тогда countryControls[ countryControls.length - 2 ] и будет undefined .Вы должны только минус 1 .

 addControls () {
   var countryControls = this.state.countryControls;
   countryControls.push({
      id: null,
      country_id:countryControls.length > 0 ? 
      countryControls[ countryControls.length - 1 ].country_id : '',
      description: '',
      city_id: '',
});

this.setState({ countryControls: countryControls});
}
 

Комментарии:

1. @louiekim Рассмотрите возможность принятия ответа, если вы удовлетворены ответом.

2. уже сделал … Там написано Спасибо за отзыв! Голоса, поданные лицами с репутацией менее 15, записываются, но не изменяют публично отображаемый результат публикации …. еще раз спасибо