#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
(см.: Ложные значения).