Kenzo
Kenzo

Reputation: 377

Javascript Check Object for empty or null fields and arrays

I've got an array that has a lot of objects and embedded arrays. I need to iterate through the entire array to see if anything is empty or null. My problem is checking Arrays and whether or not the arrays return empty. I keep getting object arrays and they are not null or undefined so get added in even if length is 0. What I've got so far.

var progressCount = 0;
var progressKeyLength = progressBarCriteria.length;
for (var i = 0; i<progressKeyLength; i++){
  //I can find the arrays here but still not able to check length since they are actually object arrays.
  if(Array.isArray(progressBarCriteria[i])){
    console.log('array' + i);
  }
  if (progressBarCriteria[i] !== null && progressBarCriteria[i] !== ""){
    ++progressCount
  }
}


progressBarCritiria = [
   example1: "",
   example2: "asdasdas",
   example3: 233,
   example4: {asda: 1},
   example5: {asadasda: "asdasdA"},
   example6: "",
   example7: [],
   example8: [1, 12312],
   example9: [{1: "ad"}, {1: 12312}],
]

So 1, 6 and 7 should not be added to my count.

Upvotes: 1

Views: 2140

Answers (3)

Kenzo
Kenzo

Reputation: 377

I was able to look at both answers and came up with this working solution. This is using Typescript so sorry for confusion.

for (var i = 0; i<progressKeyLength; i++){
  if (!(progressBarCriteria[i] instanceof Array)){
    if(progressBarCriteria[i] !== null && progressBarCriteria[i] !== "") {
        ++progressCount
    }
  } else {
    let current = progressBarCriteria[i];
    if (Array.isArray(current) && current.length !== 0){
      ++progressCount
    }
  }
}

Upvotes: 0

wayneOS
wayneOS

Reputation: 1425

You can use a recursive function to do that. It is important to notice that in javascript arrays are objects. So you need to check for objects by if (typeof arr === 'object' && !(arr instanceof Array)). For more informations check this and this.

function recursive_array_chekc (arr) {

  //check if arr is an object
  if (typeof arr === 'object' && !(arr instanceof Array)) {
    
    //check if object empty
    if (Object.keys (arr).length === 0) {
    
      //do something if empty
      console.log ('this object is empty');
    
    } else {
    
      //check object properties recursivly
      for (var key in arr)
        if (arr.hasOwnProperty (key))
          recursive_array_chekc (arr[key])
    
    }
  
  } else
  if (Array.isArray (arr)) {
  
    //check if array is empty
    if (arr.length === 0) {
    
      //do something if empty
      console.log ('this array is empty');
    
    } else {
    
      //check array elements recursivly
      for (var i = 0; i < arr.length; i++)
        recursive_array_chekc (arr[i])
    
    }
  
  }   

}

Upvotes: 0

Ele
Ele

Reputation: 33726

If you need to check the length or null value for an array, you can think about the Truthy - Falsy value as follow:

if (Array.isArray(progressBarCriteria[i]) && progressBarCriteria[i].length) {
   // This is an array and is not empty.
}
  • This Array.isArray(progressBarCriteria[i]) checks if that value is an array.
  • If this progressBarCriteria[i].length is 0 the boolean value will be false, ortherwise will be true.

Upvotes: 2

Related Questions