4

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?

Fiehra
  • 659
  • 6
  • 23
volume one
  • 6,800
  • 13
  • 67
  • 146

5 Answers5

4

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
Fiehra
  • 659
  • 6
  • 23
Thalaivar
  • 23,282
  • 5
  • 60
  • 71
3

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,303
  • 1
  • 4
  • 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
  • 5,001
  • 4
  • 34
  • 49
0

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.

tobstar
  • 13
  • 3
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Aug 23 '22 at 14:46
  • @Community Bot i have edit the comments. – tobstar Aug 23 '22 at 18:32
-1

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

Alex
  • 4,621
  • 1
  • 20
  • 30