Удалить пустой объект из массива объектов

#javascript #arrays

Вопрос:

У меня есть массив объектов и функция удаления, которые передают индекс в качестве параметра, но не могут удалить пустой объект. Объекты, содержащие свойства, могут быть удалены. Кто-нибудь знает, как это исправить? Пример кода показан ниже.

 let array = [
{
  id: '1',
  name: 'sam',
  dateOfBirth: '1998-01-01'
},
{
  id: '2',
  name: 'chris',
  dateOfBirth: '1970-01-01'
},
{
  id: '3',
  name: 'daisy',
  dateOfBirth: '2000-01-01'
},
{}
]

// Objects contain properties can be removed but empty object can not be removed.
const deleteItem = (index) => {
  return array.splice(index, 1);
};
 

Комментарии:

1. Я думаю, что ваш код работает… просто проверьте эту скрипку: jsfiddle.net/wp8rezt0 Я использую Chrome в Linux и работает.

2. @FedericoSaenz если вы нажмете «Показать», а затем «Удалить», это не сработает.

3. Да, это работает. Только нажмите еще раз на «showResults».

4. Это также работает для меня. Вы уверены, что не ошиблись в расчете индекса?

5. OP: что вы на самом деле передаете в качестве аргумента «index»? Вы ожидаете, что он будет соответствовать «id»? Это не так: оно соответствует позиции в массиве (на основе 0). Если вы передадите 3, он удалит пустой объект (как показывает fiddle Федерико).

Ответ №1:

Используется Array.filter для фильтрации элементов, у которых нет свойств

 let array = [
  {id:"1",name:"sam",dateOfBirth:"1998-01-01"},
  {id:"2",name:"chris",dateOfBirth:"1970-01-01"},
  {id:"3",name:"daisy",dateOfBirth:"2000-01-01"},
  {}
]

const filtered = array.filter(e => Object.keys(e).length)

console.log(filtered) 

Вышеуказанное работает, поскольку Object.keys возвращает массив свойств объекта. Получение его length свойства приведет к получению количества элементов в массиве. Если length свойство есть 0 , оно принудительно присваивается false (см.: Ложные значения).