You don't need of any third party library or JavaScript framework.
With JavaScript:
The best way is by grouping with the League
key by using Array.reduce()
.
data.Result.Teams.reduce(function(result, current) {
result[current.League] = result[current.League] || [];
result[current.League].push(current);
return result;
}, {});
So you can convert this:
{
"Teams": [
{
"League": "Türkiye Spor Toto Süper Lig",
"TeamId": 16,
"Team": "Beşiktaş"
},
{
"League": "Türkiye Spor Toto Süper Lig",
"TeamId": 17,
"Team": "Başakşehir"
},
{
"League": "La Liga",
"TeamId": 18,
"Team": "Barcelona"
},
{
"League": "La Liga",
"TeamId": 19,
"Team": "Real Madrid"
}
]
}
To this:
{
"Türkiye Spor Toto Süper Lig": [
{
"League": "Türkiye Spor Toto Süper Lig",
"TeamId": 16,
"Team": "Beşiktaş"
},
{
"League": "Türkiye Spor Toto Süper Lig",
"TeamId": 17,
"Team": "Başakşehir"
}
],
"La Liga": [
{
"League": "La Liga",
"TeamId": 18,
"Team": "Barcelona"
},
{
"League": "La Liga",
"TeamId": 19,
"Team": "Real Madrid"
}
]
}
With the new array you need to build the select tag by using this function:
function buildSelect(data) {
var i, len, select = "<select>";
for (item in data) {
select += "<optgroup label=\"";
select += item;
select += "\">";
len = data[item].length;
for (i = 0; i < len; i++) {
select += "<option value=\"";
select += data[item][i].TeamId;
select += "\">";
select += data[item][i].Team;
select += "</option>";
}
select += "</optgroup>";
}
select += "</select>";
return select;
}
So the desired HTML result would be:
<select>
<optgroup label="Türkiye Spor Toto Süper Lig">
<option value="16">Beşiktaş</option>
<option value="17">Başakşehir</option>
</optgroup>
<optgroup label="La Liga">
<option value="18">Barcelona</option>
<option value="19">Real Madrid</option>
</optgroup>
</select>
Usage:
document.getElementById("result").innerHTML = buildSelect(getLeagues(data));
Something like this:
(function() {
var data = {
"Status": 200,
"Result": {
"Teams": [{
"League": "Türkiye Spor Toto Süper Lig",
"TeamId": 16,
"Team": "Beşiktaş"
},
{
"League": "Türkiye Spor Toto Süper Lig",
"TeamId": 17,
"Team": "Başakşehir"
},
{
"League": "La Liga",
"TeamId": 18,
"Team": "Barcelona"
},
{
"League": "La Liga",
"TeamId": 19,
"Team": "Real Madrid"
}
]
}
};
// Returns teams grouped by league.
function getLeagues(data) {
var leagues = data.Result.Teams.reduce(function(result, current) {
result[current.League] = result[current.League] || [];
result[current.League].push(current);
return result;
}, {});
return leagues;
}
function buildSelect(data) {
var i, len, select = "<select>";
for (item in data) {
select += "<optgroup label=\"";
select += item;
select += "\">";
len = data[item].length;
for (i = 0; i < len; i++) {
select += "<option value=\"";
select += data[item][i].TeamId;
select += "\">";
select += data[item][i].Team;
select += "</option>";
}
select += "</optgroup>";
}
select += "</select>";
return select;
}
document.getElementById("result").innerHTML = buildSelect(getLeagues(data));
})();
<div id="result">
</div>