Как удалить определенный элемент массива в состоянии, без пересборки этого массива?
Есть состояние:
this.state = {
names: ["name1", "name2", "name3"],
};
Мне нужна функция, которая будет удалять какое либо значение по имени, а не id, что то вроде такой, но на данный момент она просто бесконечно исполняется и все крашится:
this.setState((prevState) => ({ names: [...prevState.names, delete[name]] }));
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
Удаление без создания нового массива
Метод splice() изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.
const state = {
names: ["name1", "name2", "name3"],
};
console.log(state);
const deletable = 'name3';
for (let i = 0, len = state.names.length; i < len; i++) {
if (state.names[i] === deletable) {
state.names.splice(i, 1);
break;
}
}
console.log(state);
Удаление c созданием нового массива
Метод filter() создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.
const state = {
names: ["name1", "name2", "name3"],
};
console.log(state);
const deletable = 'name3';
state.names = state.names.filter((name) => name !== deletable);
console.log(state);