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

Time:04-13

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 != ''));
 }

Thanks in advance ,

CodePudding user response:

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);

CodePudding user response:

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)

CodePudding user response:

If you don't want to mutate the original array:

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


let result;

Object.keys(array[0])
.forEach(key => {
    if(array.every(e => e[key] === ''))
        result = array.map(({[key]:_,...rest}) => ({...rest}))
})

console.log(result)

  • Related