jQuery: Looping through object properly?

29,198

Solution 1

The inner object you're fetching fine, valueObj is the array, it just has no method .toSource() (at least not cross-browser anyway), if you remove that you'll get an alert:

$.each(myObject, function(key,valueObj){
    alert(key + "/" + valueObj );
});

You can test it out here, don't be thrown that the output is just:

prop_1/1,2
prop_2/3,4

...the default .toString() on an Array is a comma delimited list, so that's what you see with an alert(). For example, if you instead did alert(key + "/" + valueObj[0] );, you'd see:

prop_1/1
prop_2/3

...so you can see you do have the Array you want, you can test that here.

Solution 2

You could use a for in loop:

    var myObject = ({ prop_1:["1", "2"], prop_2:["3", "4"]})
    for (var key in myObject) {
       if (myObject.hasOwnProperty(key)) {
           alert(key + "/" + myObject[key]);
        }
     }
Share:
29,198
Industrial
Author by

Industrial

I just want to lie on the beach and eat hot dogs. That’s all I’ve ever wanted. Really.

Updated on July 09, 2022

Comments

  • Industrial
    Industrial almost 2 years

    I am trying to loop through the below shown JS object with the following code snippet, while needing to fetch both the index key as well as the inner object.

    How on earth should I do this, as the following doesn't work?

    The object:

    ({ prop_1:["1", "2"],
     prop_2:["3", "4"]})
    

    My code:

    $.each(myObject, function(key,valueObj){
        alert(key + "/" + valueObj.toSource() );
    });
    

    Expected output:

    prop_1 / (["1", "2"])
    
  • mdup
    mdup over 11 years
    This will include functions as well, so be sure to filter them with typeof if you don't want them. (JavaScript, The Good Parts, 3.7 Enumeration)