Métodos C# equivalente em JavaScript (versão até ES5)
Como programo em C# há muitos anos, vira e mexe me deparo com a pergunta “qual é a função javascript equivalente a esse LINQ do C#?” e assim lá vou eu buscar no Google ou em outra ferramenta.
Então esse post também vai servir como um repositório para consultas futuras quando eu sempre tiver essa dúvida porque eu nunca lembro de cabeça. As equivalencias abaixo são para aplicações que não dão suporte ao ECMAScript 6. Se você já trabalha com javascript moderno vá para este post que os códigos estão atualizados.
Vamos utilizar esse um array simples para manipular os dados:
var usuarios = [ { nome: "Tiago", id: 1 }, { nome: "Crizanto", id: 2 }, { nome: "John", id: 3 }, { nome: "Doe", id: 4 } ];
LINQ Where
var filtroPorId = usuarios.filter(function (item) { return item.id <= 2; }); console.log("Id:", filtroPorId);
LINQ Select
var nomes = usuarios.map(function (item) { return item.nome; }); console.log("Nome:", nomes);
LINQ All
var maiorQueDois = usuarios.every(function (item) { //existe id maior que dois? return item.id > 2; }); console.log("Id's maiores que 2: ", maiorQueDois);
LINQ Any
var menorQueTres = usuarios.some(function (item) { //existe id menor que 1? return item.id < 3; }); console.log("Id's menores que 3", menorQueTres); // false
LINQ Sum
var somaIds = usuarios.reduce(function (item1, item2) { return { nome: '', id: item1.id + item2.id }; }); console.log("Soma Id's", somaIds.id);
LINQ OrderBy
var ordenadoPorNome = usuarios.sort(function (a, b) { return a.nome < b.nome ? 1 : -1; }); //Ordenação decrescente. Para ordenar de forma crescente basta utilizar a.nome > b.nome console.log("Ordenado por nome:", ordenadoPorNome);
Combinando funções
Também é possível combinar funções como por exemplo retornar o de forma ascendente os id’s maiores que 2:
var data = usuarios.filter(function (pessoa) { return pessoa.id > 2; }).map(function (pessoa) { return pessoa.nome; }).sort(function (a, b) { return a > b ? 1 : -1; }); console.log("Usuário com id > 2 ordenado decrescente:", data);
Pronto! No post seguinte eu mostro as mesmas funções mas com suporte ao ES6.
[…] post anterior mostrei algumas funções do LINQ equivalente em JavaScript, porém, na versão suportada até o […]