Как удалить элемент из массива на JavaScript?

Оказалось чтобы удалить что-то из массива в JavaScript нужно немного заморочиться — понятное дело если ты уже встречался с этим, но, что если нет?

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

В принципе сделать это очень просто используя splice, но там я должен уверенно знать  индекс элемента и сколько элементов после старта я должен удалить, ну обычно это 1.

Примерно вот так:

const myArray = ['a', 'b', 'c', 'd'];
myArray.splice(3, 1);
console.log(myArray);

А что сделать если я хочу удалять по ключу вне зависимости от того где он находится?

Хотелось бы что-то наподобие вот такой конструкции: 

let a = ['foo', 'bar', 'baz'];
a.remove('bar');
console.log(a); // ['foo', 'baz']

Но печальная новость заключается в том, что такой конструкции не существует, а значит использовать ее нельзя, но есть и хорошая новость — ее можно создать!

В первом случае мы уверенно удалили то что на ненужно, только вот тут мы заведомо знали что удалять, и вот именно здесь на помощь может прийти indexOf, давайте глянем пример:

let b = ['foo', 'bar', 'baz'];
console.log(b.indexOf('bar')); // 1

Получается, мы знаем что нам нужно удалить, осталось лишь добавить конструкцию в для работы с массивами, что я и сделал:

Array.prototype.remove = function(value) {
 let idx = this.indexOf(value);
 if (idx != -1) {
  return this.splice(idx, 1);
 }
 return false;
}

Как итог, можем повториться вновь:

let a = ['foo', 'bar', 'baz'];
a.remove('bar');
console.log(a); // ['foo', 'baz']

Все работает как часики — не благодарите!

И все-таки кто-то может спросить меня почему я не использовал оператор delete?

Но беда в том, что при удалении элемента из массива элемент какбы заменяется на undefined, тоесть не удаляется сам индекс, лишь значение.

let a = ['foo', 'bar', 'baz'];
delete a[1];
console.log(a); // ["foo", undefined, "baz"]

Именно по этому это не подходящий вариант.

Очень надеюсь, что мой пост оказался полезным, немного ниже можете сказать спасибо (поделитесь постом в соц. сетях). Спасибо!

Метки: ,

Оставьте комментарий