Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove empty values from array of objects only if the value is empty in all objects

I'm trying to remove the empty strings in my array.

This is my array:

let array = [
    { name: 'John', age: '18', address: '' }, 
    { name: 'George', age: '', address: '' }, 
    { name: 'Kevin', age: '25', address: '' }
]

I would like to remove the empty string values ONLY if it's empty in all objects.

desired outcome:

[
    { name:'John', age:'18' },
    { name:'George', age:'' },
    { name:'Kevin', age:'25' }
]

This is what I did but it removes EVERY empty string values:

 for (let i = 0; i < array.length; i++) {
    array[i] = Object.fromEntries(Object.entries(array[i]).filter(([_, v]) => v != ''));
 }
like image 791
Bar Levin Avatar asked Sep 16 '25 15:09

Bar Levin


2 Answers

If you don't mind mutating the original array object. Here's a solution utilizing some array functions.

let array = [
  { name: 'John', age: '18', address: '' },
  { name: 'George', age: '', address: '' },
  { name: 'Kevin', age: '25', address: '' }
]

Object.keys(array[0])
  .filter(k => array.every(obj => !obj[k]))
  .forEach(k => array.forEach(obj => delete obj[k]));

console.log(array);
like image 185
Hao Wu Avatar answered Sep 19 '25 04:09

Hao Wu


You can solve this issue with a filter method

  • get all the entries to be scanned in the array;
  • for each entry, filter the array with it; if the output array is empty then you can delete this value in the original array

let array = [{name:'John',age:'18',address:''},{name:'George',age:'',address:''},{name:'Kevin',age:'25',address:''}]

const entries = Object.keys(array[0])

entries.forEach(e => {
  if (array.filter(i => i[e]).length === 0) {
    array = array.map(i => {
      delete i[e];
      return i
    })
  }
})

console.log(array)
like image 25
Frédéric Lang Avatar answered Sep 19 '25 05:09

Frédéric Lang