2

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?

volume one
  • 6,085
  • 10
  • 51
  • 121

4 Answers4

3

You could so something like below:

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


console.log(checkIfEmpty([[{"name":"something"}]])); // false
console.log(checkIfEmpty([[]])); // true
Thalaivar
  • 22,304
  • 5
  • 59
  • 68
2

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"
}
elvira.genkel
  • 1,278
  • 1
  • 3
  • 11
1

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")
} 
Olimpiu POP
  • 4,856
  • 4
  • 32
  • 46
-1

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

Alex
  • 4,401
  • 1
  • 17
  • 29