Reputation:
I have an array as shown below where I want to filter the data and insert the filtered list into a dropdown list.
Here is the data:
{"people":[
{
"id":"100",
"name":"name 1",
"desc":"desc 1",
"class": "a"
},
{
"id":"192",
"name":"name 2",
"desc":"desc 2",
"class": "b"
},
{
"id":"324",
"name":"name 3",
"desc":"desc 3",
"class": "b"
},
{
"id":"324",
"name":"name 4",
"desc":"desc 4",
"class": "a"
},
{
"id":"324",
"name":"name 5",
"desc":"desc 5",
"class": "a"
}
]}
What I now need to do is to add the array with "class" of "a" and then insert the id's of these into a dropdown list like:
$('#myselect').append($('<option>').text(value.id).attr('value', value.id));
How can I do this?
Upvotes: 0
Views: 1764
Reputation: 18153
You can do like this with lodash library
//Filter with class = 'a'
var peopleWithClassA = _.filter(obj.people, { class: 'a' });
//Append option elem for each filtered people
_.forEach(peopleWithClassA, function(people) {
$('#myselect').append($('<option>')
.text(people.id)
.attr('value', people.id));
});
Without lodash :
obj.people
.filter(function(p) {
return p.class === 'a';
})
.forEach(function(p) {
$('#myselect').append($('<option>').text(p.id).attr('value', p.id));
});
Upvotes: 0
Reputation: 24945
You can try something like this:
If you feel, adding select
s in html is an over kill, you can generate them also based on data.
var data = {
"people": [{
"id": "100",
"name": "name 1",
"desc": "desc 1",
"class": "a"
}, {
"id": "192",
"name": "name 2",
"desc": "desc 2",
"class": "b"
}, {
"id": "324",
"name": "name 3",
"desc": "desc 3",
"class": "b"
}, {
"id": "324",
"name": "name 4",
"desc": "desc 4",
"class": "a"
}, {
"id": "324",
"name": "name 5",
"desc": "desc 5",
"class": "a"
}]
}
var uniqueClasses = {};
data.people.forEach(function(p) {
uniqueClasses[p.class] = 1;
});
Object.keys(uniqueClasses).forEach(function(c) {
var _html = data.people.filter(function(p) {
return p.class === c
}).map(function(p) {
return "<option value='" + p.id + "'>" + p.name + "</option>"
}).join("");
$("#class_" + c).append(_html);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<select id="class_a"></select>
<select id="class_b"></select>
Upvotes: 0
Reputation: 9561
Here is an solution using Array.filter()
var obj = {
"people": [{
"id": "100",
"name": "name 1",
"desc": "desc 1",
"class": "a"
}, {
"id": "192",
"name": "name 2",
"desc": "desc 2",
"class": "b"
}, {
"id": "324",
"name": "name 3",
"desc": "desc 3",
"class": "b"
}, {
"id": "324",
"name": "name 4",
"desc": "desc 4",
"class": "a"
}, {
"id": "324",
"name": "name 5",
"desc": "desc 5",
"class": "a"
}]
};
obj.people.filter(function(val) {
if (val.class == "a") {
$('#myselect').append($('<option>').text(val.id).attr('value', val.id));
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="myselect">
</select>
Upvotes: 1