I don’t know if there is a Typescript way for this, but to solve your problem a Javascript solution would meet.
Javascript pure
var arr =
[
{ IDCidade: 10, Nome: "Foo" },
{ IDCidade: 10, Nome: "Bar" },
{ IDCidade: 20, Nome: "Foo" },
{ IDCidade: 20, Nome: "Bar" }
];
function groupBy(colecao, propriedade) {
var agrupado = [];
colecao.forEach(function (i) {
var foiAgrupado = false;
agrupado.forEach(function (j) {
if (j.Key == i[propriedade]) {
j.Elements.push(i);
foiAgrupado = true;
}
});
if (!foiAgrupado) agrupado.push({ Key: i[propriedade], Elements: [ i ] });
});
return agrupado;
}
var groups = groupBy(arr, 'IDCidade');
console.log(JSON.stringify(groups));
Exit:
[{"Key":10,"Elements":[{"IDCidade":10,"Nome":"Foo"},{"IDCidade":10,"Nome":"Bar"}]},
{"Key":20,"Elements":[{"IDCidade":20,"Nome":"Foo"},{"IDCidade":20,"Nome":"Bar"}]}]
Using Linq.js
The library Linq.js has a method GroupBy
:
var arr =
[
{ IDCidade: 10, Nome: "Foo" },
{ IDCidade: 10, Nome: "Bar" },
{ IDCidade: 20, Nome: "Foo" },
{ IDCidade: 20, Nome: "Bar" }
];
var groups = Enumerable.From(arr).GroupBy("e => e.IDCidade", null, "e, grupo => { Key: e, Elements: grupo.ToArray() }").ToJSON();
console.log(groups);
Exit:
[{"Key":10,"Elements":[{"IDCidade":10,"Nome":"Foo"},{"IDCidade":10,"Nome":"Bar"}]},
{"Key":20,"Elements":[{"IDCidade":20,"Nome":"Foo"},{"IDCidade":20,"Nome":"Bar"}]}]