43

I have JSON objects that have several properties such as an id and name. I store them in a JavaScript array and then based on a dropdownlist I want to retrieve the object from the JavaScript array based on its id.

Suppose an object has id and name, how do I select them from my array variable?

var ObjectsList = data;
var id = $("#DropDownList > option:selected").attr("value");
ObjectsList["id=" + id];
1
  • You need to show the actual JSON data that you're trying to select from in order for us to be able to advise how to access it. Commented Nov 29, 2011 at 5:51

1 Answer 1

60

Since you already have jQuery, you could use $.grep:

Finds the elements of an array which satisfy a filter function. The original array is not affected.

So something like this:

var matches = $.grep(ObjectsList, function(e) { return e.id == id });

that will leave you with an array of matching entries from ObjectsList in the array matches. The above assumes that ObjectsList has a structure like this:

[
    { id: ... },
    { id: ... },
    ...
]

If you know that there is only one match or if you only want the first then you could do it this way:

for(var i = 0, m = null; i < ObjectsList.length; ++i) {
    if(ObjectsList[i].id != wanted_id)
        continue;
    m = a[i];
    break;
}
// m is now either null or the one you want

There are a lot of variations on the for loop approach and a lot of people will wag a finger at me because they think continue is a bad word; if you don't like continue then you could do it this way:

for(var i = 0, m = null; i < ObjectsList.length; ++i) {
    if(ObjectsList[i].id == wanted_id) {
        m = ObjectsList[i];
        break;
    }
}
1
  • 3
    This did the trick just had to put [0] at the end to select the first element of the new array that matches the filter. Commented Nov 29, 2011 at 14:52

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.