4

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 != ''));
 }
2
  • Can we assume that all objects in the array are the same (i.e. contain the same set of properties)? Commented Apr 13, 2022 at 8:10
  • @yuvin Yes , all objects are the same Commented Apr 13, 2022 at 8:10

3 Answers 3

7

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

Sign up to request clarification or add additional context in comments.

Comments

3

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)

Comments

1

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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.