0

If I have a list of objects, how can I check if elements in the list are empty objects. I feel like this should be straight forward however it confuses me a little because when I do something like this in my react function component

console.log(list[0])

It will output {} on every render in my react component

However when I do something like

if (list[0] == {}){
  console.log('empty')}

It never ends up reaching there. Is there a cleaner way to check if objects inside a list are empty? Or preferably if all the objects in a list are empty? I feel like im missing something very obvious but im not sure why it wouldnt reach the log in the if conditional.

aj soprano
  • 151
  • 1
  • 6
  • 2
    Duplicate? I.e., Couldn't you just iterate over the array checking each object using this approach? https://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object – Marc Jun 29 '22 at 18:37
  • Why do you need to check for "empty objects" in the first place? That's an unusual way to design an application and [there is probably a better way](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) if you don't mind providing more context. But yeah, `{} == {}` is false, so this is the wrong way to go about comparing objects. – ggorlen Jun 29 '22 at 18:39

1 Answers1

0

A way in which you can check that every element in a list is using the every() method (read more here). The every method will return a boolean value of whether every element in the list passes the test implemented in the provided function.

In this case, we want to check if every object is considered empty. According to this StackOverflow answer we can test if an object is empty with the following function.

function isEmpty(val) {
  return Boolean(val && typeof val === 'object') && !Object.keys(val).length;
}

We can then implement this into the every function.

const allEmpty = myList.every(element => {
  return Boolean(element && typeof element === 'object') && !Object.keys(element).length;
});

The allEmpty variable will be true if all elements of your list are considered empty objects.

Austin McCalley
  • 392
  • 1
  • 4
  • 17
  • Side question: Is there a reason for the `Boolean()`? It looks to me like the logical flow works fine without it. – Noam Jun 29 '22 at 19:06