Как удалить определенный элемент массива в состоянии, без пересборки этого массива?

Есть состояние:

this.state = {
    names: ["name1", "name2", "name3"],
};

Мне нужна функция, которая будет удалять какое либо значение по имени, а не id, что то вроде такой, но на данный момент она просто бесконечно исполняется и все крашится:

this.setState((prevState) => ({ names: [...prevState.names, delete[name]] }));

Ответы (1 шт):

Автор решения: nörbörnën

Удаление без создания нового массива

Array.prototype.splice()

Метод 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 созданием нового массива

Array.prototype.filter()

Метод filter() создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.

const state = {
  names: ["name1", "name2", "name3"],
};
console.log(state);

const deletable = 'name3';

state.names = state.names.filter((name) => name !== deletable);

console.log(state);

→ Ссылка