Как добавить значение для конкретного object
в array
по index
?
Я написал это, но, конечно, он создает новый object
в array
, но я хочу вставить «ошибки» в существующий object
с index
(на экране это 0 индекс)
ipcRenderer.on('fileData', (event, data) => {
this.setState({jobs: [...this.state.jobs, {errors: data}]})
});
Тогда я написал это:
ipcRenderer.on('fileData', (event, data) => {
this.state.jobs.forEach((item, index) => {
this.setState({jobs: [...this.state.jobs, {errors: item[index] = data}]
})
console.log(this.state)
})
});
Он вставляет значение в object
, но без имени, и все равно создает новый элемент в array
Я хочу, чтобы результат был таким:
jobs: [
0: {errors: 10, fileName:...}
]
Всего 3 ответа
Если вы знаете индекс, вы можете просто сделать
const jobs = this.state.jobs.slice(0);
jobs[index].errors = data;
this.setState({jobs});
Возможно, придется сделать больше, чем нарезать массив, возможно, придется сделать глубокую копию, но да, это должно сработать.
Во-первых, вы можете сделать копию вашего массива как
let jobsCopy = this.state.jobs
Тогда, если вы знаете индекс, вы можете просто сделать как
jobsCopy[index].errors = 10
this.setState({
jobs: jobsCopy
})
Вам нужно знать индекс объекта, который вы хотите изменить. Например, если вы знаете, что это первый элемент в массиве, вы можете сделать это:
const indexToChange = 0
this.setState(prevState => prevState.map((obj, i) => {
if(i === indexToChange) {
return {
...obj,
errors: data
}
} else {
return obj
}
}))