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 != ''));
 }
VLAZ
29.6k9 gold badges65 silver badges88 bronze badges
asked Apr 13, 2022 at 8:03
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);

answered Apr 13, 2022 at 8:20
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)

VLAZ
29.6k9 gold badges65 silver badges88 bronze badges
answered Apr 13, 2022 at 8:23

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)

answered Apr 13, 2022 at 8:48

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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.