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.