#javascript #reactjs
#javascript #reactjs
Вопрос:
Я пытаюсь обновить определенное значение внутри объекта, который находится внутри массива объектов. Пример:
[
{
id: 1,
service: 1001,
country: {
id: 1,
countryname: India
},
ts: 1597758281
},
{
id: 2,
service: 1002,
country: {
id: 2,
countryname: USA
},
ts: 1597758283
}
]
Теперь я хочу обновить значение идентификатора страны первого объекта, чтобы оно стало похоже:
[
{
id: 1,
service: 1001,
country: {
id: 2,
countryname: USA
},
ts: 1597758281
},
{
id: 2,
service: 1002,
country: {
id: 2,
countryname: USA
},
ts: 1597758283
}
]
Это то, что я пробовал до сих пор, я получаю индекс элемента, который должен быть обновлен. Затем я создал копию исходного массива, а затем пытаюсь обновить значение. Но, похоже, это не работает.
handleUpdate = (event, item) => {
const elementsIndex = this.state.laneArray.findIndex(element => element.id == item.id);
let newArray = [...this.state.laneArray]
if (event.target.name === "countryName") {
newArray[elementsIndex] = { ...newArray[elementsIndex], [newArray[0].country.id]: event.target.value }
}
this.setState({
laneArray: newArray,
});
}
Я думаю, мне нужно обновить весь объект country. Как я мог это сделать?
Ответ №1:
Как только у вас будет индекс, разрежьте массив до и после этого индекса, а в середине задайте country
свойству объект с новым идентификатором и с существующим countryname
:
const input = [
{
id: 1,
service: 1001,
country: {
id: 1,
countryname: 'India'
},
ts: 1597758281
},
{
id: 2,
service: 1002,
country: {
id: 2,
countryname: 'USA'
},
ts: 1597758283
}
];
const i = 0;
const newId = 2;
const output = [
...input.slice(0, i),
{
...input[i],
country: { id: newId, countryname: input[i].country.countryname }
},
...input.slice(i 1),
];
console.log(output);
Также имейте в виду, что для строковых литералов требуются разделители, такие как '
или "
или обратные метки.