В JavaScript не существует настоящего способа удалить элемент из массива. Инструкция delete
лишь очищает значение, но сама ячейка никуда не девается:
const numbers = [1, 10];
delete numbers[0];
console.log(numbers);
// => [ <1 empty item>, 10 ]
При этом задача удаления возникает регулярно. Причем, обычно, удаляется не один элемент, а набор элементов по определенным правилам. Например довольно распространена операция compact – удаление null
значений из массива. Как правильно ее реализовать?
В подавляющем большинстве ситуаций, изменение массива должно трансформироваться в создание нового массива, в котором отсутствуют удаляемые элементы. Ниже пример реализации функции compact()
const compact = (coll) => {
// Инициализация результата
// Для пустой входной коллекции результатом будет пустой массив
const result = [];
for (const item of coll) {
if (item !== null) {
result.push(item);
}
}
return result;
};
console.log(compact([0, 1, false, null, true, 'wow', null]));
// => [ 0, 1, false, true, 'wow' ]
console.log(compact([]));
// => []
https://repl.it/@hexlet/js-arrays-removing-compact
Главное, на что нужно обратить внимание, — не происходит модификаций исходного массива coll
. Вместо этого создаётся новый массив result
, который наполняется только подходящими под условие значениями. Именно так нужно воспринимать фразу "удалить из массива что-то". Код, использующий новый массив, меньше подвержен ошибкам, проще в отладке и оставляет больше возможностей для анализа. Вы всегда можете посмотреть исходный массив, если что-то пошло не так. Вы всегда можете наблюдать за процессом наполнения результирующего массива, что позволит чётко отследить правильность поставленных условий.
По сути, код выше — пример агрегации. Только в отличие от предыдущих примеров, в которых результатом был примитивный тип, здесь результат — массив. Это совершенно нормально. Как вы увидите в дальнейшем, результат может быть и более сложной структурой. Сама операция прореживания (удаления элементов по определенным условиям) массива обычно называется фильтрацией.
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт