How to check if a nested array is empty or not?

Viewed 2872

How do I check whether a nested array is empty or not? The array looks like this when there is no data:

const data = [ [  ] ]

And if it has data it looks like this:

const data = [
  [{"Product": 7  }]
]

To check if it is empty I am doing the following which does not work:

if (!Array.isArray(data[0][0]) || data[0][0].length === 0) {
  return "Data is empty"
}
  1. What I don't understand is why !Array.isArray(data[0][0]) returns true, which means the nested array is not an array (which is strange because it is an array, just empty). According to the docs, Array.isArray([]) returns true so how can !Array.isArray(data[0][0] return true?

  2. The data[0][0].length part throws an error saying "TypeError: "data[0][0] is undefined"". Why would that be the case?

  3. That leads to the question of how to check if a nested array is empty or not?

5 Answers

You could do something like this:

function checkIfEmpty(array) {
  return Array.isArray(array) && (array.length == 0 || array.every(checkIfEmpty));
}


console.log(checkIfEmpty([[{"name":"something"}]])); // false
console.log(checkIfEmpty([[]])); // true

data[0][0] is the first element of nested array: for first example it is undefined, for second object {"Product": 7 }. You need to check data[0] - it is first nested array, so you need the following:

if (!Array.isArray(data[0]) || data[0].length === 0) {
    return "Data is empty"
}

You can check whether an array is empty like this:

if (Array.isArray(a) && a.length) {
     // whatever you would like to do
} 

A very comprehensive explanation you can find in this response. So, looking at your concrete question that would mean the following:

const data = [[]]

if (Array.isArray(data[0]) && data[0].length === 0) {
     // whatever you would like to do
     console.log("empty array")
} 

You can just do:

yourNestedArray.flat().length > 0 ? 'some content' : 'im empty';

Flat a builtin function of the javascript Array class that flattens a multidimensional array by iterating through all nested items and concats them to a 1d array.

Use should first apply Array.prototype.flat() an then check the length of a resulting array.

Related