You have a small misgiving here. You're not looping over an Array, you are looping over the properties of an Object with a for...in
loop.
You should be careful with that. You probably want to make it 'safe'(won't traverse the prototype or non enumerable properties) by changing to a more updated methods of traversal. Namely safely getting the values of the object, not the keys and then looping over it with some of the newer looping functions.
We'll be using Object.values
to get an array of the values since we don't need the keys, then Array.prototype.filter()
to filter out anything without a 'car1' property as reported by Object.prototype.hasownproperty()
, and finally mapping over it to transform it with Array.prototype.map()
. As a way to keep the alerts in, we will then be alerting on each of them using Array.prototype.forEach()
Object
.values(myObj) // since we don't care about the keys, only loop over the values
.filter(obj => // filter out any values without a 'car1' property
obj.hasOwnProperty('car1')
)
.map(obj => obj.car1) // de-nest the car1 property
.forEach(alert)
Now we have an array of the car1 properties of the values in the Object. The good news is this will work if given an Array of objects as well instead of a nested Object, but only because we don't care about the keys that hold the objects and only that an object actually has a 'car1' property
Tricks used for brevity
Arrow Functions
function (a,b){ return console.log(a,b) }
can be rewritten as
(a,b) => console.log(a,b)
Direct function reference
[1,2,3].forEach(item => alert(item))
can be rewritten since in JavaScript functions are first order and can be passed as arguments to other functions
[1,2,3].forEach(alert)