0

I'm having troubles deleting properties with no keys in its value.

obj = {person: {id: 1, name: 'isaac'}, 
       location: {id: 1, name: 'UT'}, 
       status: {id: 1, name: 'Active'}, 
       empty: {}
}
for (key in obj) {
    if (Object.keys(obj.key).length == 0) {
        delete obj.key
    }
}

Running this code in chrome console I get the error:

Uncaught TypeError: Cannot convert undefined or null to object
    at Function.keys (<anonymous>)
    at <anonymous>:2:16
(anonymous) @   VM13940:2

I know this comes from Object.keys receiving null or undefined.

I don't understand how unless there is something going on with the object Prototype that I'm not seeing.

ifinley
  • 3
  • 2
  • @Wyck That worked. I was using obj.key because I saw it being used that way to delete properties in the mozilla dev docs. Does the latter method (obj.key) try to access the keys as a string? – ifinley Oct 27 '21 at 17:13
  • `obj.key` -> `obj[key]` – VLAZ Oct 27 '21 at 17:13

2 Answers2

0

Oops! You meant:

for (key in obj) {
    if (Object.keys(obj[key]).length == 0) {
        delete obj[key]
    }
}

obj.key is actually obj["key"] But you meant to access the property of obj whose name is stored in the key variable, which is expressed as obj[key].

Wyck
  • 10,311
  • 6
  • 39
  • 60
0

You are super close, but you are looking for 'key' as a property in your object. If you need to use a variable to reference a key of a object you have to use [].

The following code will do what you are looking to achieve:

for (key in obj) {
    if (Object.keys(obj[key]).length == 0) {
        delete obj[key]
    }
}
JP-LISN
  • 143
  • 5