как проверить, являются ли несколько объектов пустыми в массиве

#javascript

#javascript

Вопрос:

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

 [{},{},{},{},{},{},{},{},{},{}] // length is dynamic
  

У меня есть способы:

  Object.keys(myarray[0]).length === 0; //but this applies only for object.
  

есть ли случайно элегантный способ проверить это в одном условии?

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

1. Вы хотите проверить, является ли хотя бы 1 объект в массиве пустым или в массиве пусто более одного объекта

Ответ №1:

Чтобы определить, есть ли какие-либо пустые объекты в вашем массиве, используйте Array.prototype.some() в сочетании с Object.keys() и Array.prototype.length

 const anyEmptyObjects = myarray.some(o => Object.keys(o).length === 0)
  

Чтобы извлечь пустые объекты, используйте тот же предикат с Array.prototype.filter()

 const emptyObjects = myarray.filter(o => Object.keys(o).length === 0)
  

Ответ №2:

Как насчет Object.entries? Хотя я полагаю, что это не сильно отличается

 let a = [{},{test:1},{},{},{test:2},{},{},{test:3},{},{}];
let result = a.map((ele) => (Object.entries(ele) == 0));
  

вывод

 [true, false, true, true, false, true, true, false, true, true]
  

Ответ №3:

Чтобы завершить решение @ jmp, вы можете получить окончательный ответ hasEmapty следующим образом:

 const hasEmpty = arr => arr.reduce((acc, obj)=> acc || !Object.entries(obj).length, false)


//---

let a = [{},{test:1},{},{},{test:2},{},{},{test:3},{},{}];
let b = [{test: 3}, {test: 4}, {test: 5}]
let c = [{},{}]
let d = []

console.log(hasEmpty(a))
console.log(hasEmpty(b))
console.log(hasEmpty(c))
console.log(hasEmpty(d))