Как убрать undefined из массива javascript
Перейти к содержимому

Как убрать undefined из массива javascript

  • автор:

Как удалить объект из массива если в свойстве объекта присутствует null?

Нужно очистить массив от null и undefined
С массивом arr1 все получилось, а с arr2 не работает, потому что в массив приходят объекты.
Не знаю как пройтись по свойствам, выявить null и undefined и если они есть, то удалить их объект полностью из массива.

UPD:
Если раскомментировать 7 строчку — arr2.push(key.name) и закоментировать 8ю
то в arr2 попадут значения из свойства name, но почему то очистка уже не работает arr2.clean(), почему так происходит?

  • Вопрос задан более трёх лет назад
  • 362 просмотра

Комментировать
Решения вопроса 1

rockon404

Frontend Developer

var filteredArray = sourceArray.filter(function(e) < return e.someKey !== null && e.someKey !== undefined; >);

По поводу ваших велосипедов с Array.prototype.clean. Оставьте эту затею, так делать не принято. Ваша функция clean, помимо null и undefined удаляет из массива элементы со значением 0 и пустые строки.
Используйте функцию filter.

Ответ написан более трёх лет назад
Нравится 2 2 комментария

massef

massef @massef Автор вопроса

Антон Спирин Cпасибо, помогло. Слышал что фильтр медленный, если большой объект данных нужно отфильтровать.
Не подскажете по второму вопросу (без учета вашего кода). Просто интересно почему так выходит.

JavaScript: как удалить значения из массива

Массивом называется упорядоченный тип данных, хранящий несколько значений. Это означает, что каждый элемент в массиве имеет числовой идентификатор (индекс), который используется для ссылки на его место в строке.

Массивы начинаются с индекса 0 и увеличиваются на 1 для каждого значения. Для обращения к значению в массиве воспользуйтесь соответствующим индексом и заключите его в квадратные скобки [] .

let numbers = [10,20,30,40];// выводит значение с явным указанием индекса 
console.log(numbers[0]); # 10
console.log(numbers[1]); # 20
console.log(numbers[2]); # 30
console.log(numbers[3]); # 40
// другой способ: цикл for
for(let i=0; i console.log(numbers[i]);
>

Но что, если мы захотим удалить значение из нашего массива? Для этого существует четыре способа, каждый из которых имеет свои плюсы и минусы, о которых поговорим ниже.

Примечание: все четыре способа доступны без какого-либо импорта дополнительных библиотек.

Через ключевое слово delete

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

let numbers = [1,2,3,4];delete numbers[1];
console.log(numbers); // [1, undefined, 3, 4]

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

Основной вывод: при удалении значения из массива через delete задайте себе вопрос: «Нужно ли мне переиндексировать массив?».

Через метод pop()

Вам нужно удалить самое большое индексное значение из массива? Или же вы хотите переиндексировать массив так, чтобы избавиться от undefined в конце? Тогда метод pop() — это то, что доктор прописал.

let numbers = [1,2,3,4];numbers.pop();
console.log(numbers); // [1,2,3]

Через метод splice()

Если вы хотите удалить определенное значение из массива, а не конкретный индекс, и вы готовы к переиндексации массива, то присмотритесь к методу splice() .

Сплайсинг массива создает новый массив, который удаляет некое количество значений и обрезает массив слева, начиная с определенного индекса.

let numbers = [1,2,3,4];numbers.splice(2);
console.log(numbers); // [1,2]

Если же вы хотите удалить только одно значение, то воспользуйтесь вторым (не обязательным) параметром в методе splice() .

let numbers = [1,2,3,4];numbers.splice(2,1);
console.log(numbers); // [1,2,4]

Обратите внимание, что мы не выводим результат массива сразу. Это потому, что данный метод будет возвращать удаленные значения.

let numbers = [1,2,3,4];console.log(numbers.splice(2,1)); // [3]

Все, конечно, круто и здорово, однако в реальных примерах вам, вряд ли, удастся захардкодить значение индекса. Поэтому давайте воспользуемся методом indexOf() для поиска индекса значения, соответствующего условию.

// удаляет значение 3 из массива let numbers = [1,2,3,4];
i = numbers.indexOf(3);
if(i >= 0) numbers.splice(i,1);
>
console.log(numbers); // [1,2,4]

Условие if в этом коде используется для того, чтобы подтвердить нахождение значения в массиве. Если же значение не найдено, то метод indexOf() вернет -1 . Таким образом, если i больше или равно 0 , то это значение было найдено в массиве.

Через метод filter()

Метод splice() весьма удобен для нахождения и удаления одного значения. Но бывает так, что вам нужно удалить все вхождения значения (или условия) из массива. В таком случае, вашим новым другом станет метод filter() .

Этот метод принимает функцию в качестве аргумента и сохраняет значения, соответствующие true в функции filter . Чтобы отфильтровать определенное значение, необходимо проверить отрицательные индексы.

let numbers = [1,2,3,4];
numbers = numbers.filter((n) => );
console.log(numbers); // [1,2,4]

Обратите внимание, что нам приходится заново присваивать номера индексов. Дело в том, что, в отличие от метода splice() , filter() возвращает новый массив, а не выполняет действия с исходными данными.

Заключение

Это не все способы удаления значений из массива, но и среди указанных можете выбрать метод по душе или же придумать что-то свое.

  • Зачем нужен Strict Mode в JavaScript?
  • Малоизвестные функции JavaScript
  • Условный JavaScript для экспертов

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

Нам нужно удалить элемент со значением 77 и сдвинуть оставшуюся часть влево (ближе к началу).

Сделать это можно при помощи метода filter() :

arr.filter(i => i != 77)

В фильтр мы передаём стрелочную функцию, в которой проверяем Нам вернётся новый массив, без элемента со значением 77. «Пустот или дыр» в массиве не будет.

Удалили один элемент массива и сдвинули остальные методом filter() - JavaScript

Важно! Метод filter() не изменяет оригинальный массив. Он просто вызывается на оригинальном массиве, но возвращает всегда новый экземпляр. Это говорит о том, что вызов метода filter() никак не влияет на оригинальный массив.

Поэтому, чтобы изменить оригинальный массив, нужно написать выражение:

arr = arr.filter(i => i != 77)

Способ № 2 — использование оператора delete

Мы можем удалить значение элемента из массива при помощи оператора delete . Для этого мы пишем слово delete и справа от него пишем конструкцию, которая будет обращаться к нужному нам элементу массива. Стандарт ECMAScript — Раздел «13.5.1 The delete Operator» — https://tc39.es/ecma262/#sec-delete-operator

В нашем случае мы хотим удалить значение из первого элемента массива. Поэтому мы должны обратиться к индексу 0 (ноль).

var massiv = [1, 2, 3, 4] delete massiv[0] [empty, 2, 3, 4]

Удалили первый элемент массива - JavaScript

Из оригинального массива мы удалили нужное нам значение элемента, но теперь в массиве образовалась «дырка». Браузер нам подсвечивает эту дырку словом «empty«. Если сейчас попытаться обратиться к первому элементу массива, то мы получим undefined, т. к. такого значения элемента уже не существует.

Первого элемента массива не существует, он был удалён - JavaScript

Мы успешно удалили ЗНАЧЕНИЕ элемента массива. Причём удобно то, что все оставшиеся элементы массива не изменили своего положения. Значения лежат под теми же индексами.

Информационные ссылки

Стандарт ECMAScript — Раздел «ReservedWord» (Зарезервированные слова) — https://tc39.es/ecma262/#prod-ReservedWord

Вам также может понравиться

Два условия проверки на нечётное при фильтрации массива - JavaScript

Опубликовано 19.03.2021

JavaScript | Как сложить все нечётные числа в массиве?

Дано Есть массив: var massiv = [11, 4, 5, 0, 7.12, 6.4] Мы хотим узнать сумму всех целых чисел, которые НЕ делятся […]

canvas | Манипуляции с пикселями

Опубликовано 09.01.2022

canvas | Манипуляции с пикселями

Для веб-разработчиков (не нормативно) imagedata = new ImageData(sw, sh [, settings]) Возвращает объект ImageData с заданными размерами и цветовым пространством, указанным в настройках settings. Все пиксели в […]

ECMAScript | Объектные записи среды

Опубликовано 10.04.2021

ECMAScript | Объектные записи среды

Каждая Объектная запись среды (object Environment Record) связана с объектом, который называется его связывающим объектом (binding object). Объектная запись среды связывает набор […]

Минимальное число в массиве - JavaScript

Опубликовано 04.03.2021

JavaScript | Минимальное число в массиве?

Как узнать, какое число в массиве является минимальным? Задача решается при помощи метода sort() для объектов-прототипов Array. Решение задачи — […]

Как правильно удалить ключ у объекта с помощью delete

Всем привет, с вами JSExpert и сегодня в коротком уроке мы рассмотрим один интересный вопрос, а именно как удалить ключ объекта и как не нужно удалять элементы массива.

Для удаления элементов можно использовать ключевое слово delete. Но есть нюанс. Давайте рассмотрим на примере:

const index = < k1: 'first', k2: 'second', k3: 'last' >; const letters = ['a', 'b', 'c'];

У нас есть простой объект index, с ключами k1, k2, k3 и массив letters, с значениями ‘a’, ‘b’, ‘c’.

Давайте удалим ключ с объекта index. Для этого пишем перед именем объекта ключевое слово delete, а после имени объекта через точку указываем ключ, который хотим удалить, в нашем случае это ключ k2.

delete index.k2; console.log(index);

Выведем результат в консоль:

Как видим, ключ удалился и мы получили желаемый результат. Теперь, попробуем сделать тоже самое с массивом letters и удалим элемент с индексом 1.

delete letters[1]; console.log(letters, letters.length);

В консоли выведем результат, а именно сам массив letters и его длину:

[ 'a', undefined, 'c' ] 3

Тут нас ожидает сюрприз. Применяя delete к определённому индексу массива вы не удаляете элемент, вы удаляете значение самого элемента, и оно становится пустым, а именно undefined. Длина массива же остаётся неизменной. По сути, мы не удалили элемент, а сделали его пустым и он всё так же по прежнему находится в массиве.

В одном из следующих видео мы покажем вам один из возможных способов, как правильно удалять элемент из массива.

На этом сегодня всё, всем пока!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *