Skip to content

Instantly share code, notes, and snippets.

@DanDiplo
Last active April 23, 2024 11:03
Show Gist options
  • Save DanDiplo/30528387da41332ff22b to your computer and use it in GitHub Desktop.
Save DanDiplo/30528387da41332ff22b to your computer and use it in GitHub Desktop.
JavaScript equivalents of some common C# LINQ methods. To help me remember!
// JS array equivalents to C# LINQ methods - by Dan B.
// First: This version using older JavaScript notation for universal browser support (scroll down for ES6 version):
// Here's a simple array of "person" objects
var people = [
{ name: "John", age: 20 },
{ name: "Mary", age: 35 },
{ name: "Arthur", age: 78 },
{ name: "Mike", age: 27 },
{ name: "Judy", age: 42 },
{ name: "Tim", age: 8 }
];
// filter is equivalent to Where
var youngsters = people.filter(function (item) {
return item.age < 30;
});
console.log("People younger than 30:", youngsters);
// map is equivalent to Select
var names = people.map(function (item) {
return item.name;
});
console.log("Just the names of people:", names);
// every is equivalent to All
var allUnder40 = people.every(function (item) {
return item.age < 40;
});
console.log("Are all people under 40?", allUnder40); // false
// some is equivalent to Any
var anyUnder30 = people.some(function (item) {
return item.age < 30;
});
console.log("Are any people under 30?", anyUnder30); // true
// reduce is "kinda" equivalent to Aggregate (and also can be used to Sum)
var aggregate = people.reduce(function (item1, item2) {
return { name: '', age: item1.age + item2.age };
});
console.log("Aggregate age", aggregate.age); // { age: 210 }
// sort is "kinda" like OrderBy (but it sorts the array in place - eek!)
var orderedByName = people.sort(function (a, b) {
return a.name < b.name ? 1 : -1;
})
console.log("Ordered by name:", orderedByName);
// and, of course, you can chain function calls
var namesOfPeopleOver30OrderedDesc = people.filter(function (person) {
return person.age > 30;
}).
map(function (person) {
return person.name;
}).
sort(function (a, b) {
return a > b ? 1 : -1;
});
console.log("And now.. the names of all people over 30 ordered by name descending:", namesOfPeopleOver30OrderedDesc);
// Second: And now the more modern ES6 way of doing this using arrow functions (lambdas!)...
const peoples = [
{ name: "John", age: 20 },
{ name: "Mary", age: 35 },
{ name: "Arthur", age: 78 },
{ name: "Mike", age: 27 },
{ name: "Judy", age: 42 },
{ name: "Tim", age: 8 }
];
// filter is equivalent to Where
const youngPeople = peoples.filter(p => p.age < 30);
console.log("People younger than 30:", youngPeople);
// map is equivalent to Select
const justNames = peoples.map(p => p.name);
console.log("Just the names of people:", justNames);
// every is equivalent to All
const peopleUnder40 = peoples.every(p => p.age < 40);
console.log("Are all people under 40?", peopleUnder40); // false
// some is equivalent to Any
const areAnyUnder30 = peoples.some(p => p.age < 30);
console.log("Are any people under 30?", areAnyUnder30); // true
// reduce is "kinda" equivalent to Aggregate (and also can be used to Sum)
const aggregatedAge = peoples.reduce((p1, p2) => {
return { name: '', age: p1.age + p2.age }
});
console.log("Aggregate age:", aggregatedAge.age); // { age: 210 }
// sort is "kinda" like OrderBy (but it sorts the array in place - eek!)
const peopleOrderedByName = peoples.sort((p1, p2) => p1.name < p2.name ? 1 : -1);
console.log("Ordered by name:", peopleOrderedByName);
// and, of course, you can chain function calls
const peepsOver30OrderedDesc = peoples.filter(p => p.age > 30).map(p => p.name).sort((p1, p2) => p1 > p2 ? 1 : -1);
console.log("Chained", peepsOver30OrderedDesc);
@sxjoy
Copy link

sxjoy commented Mar 8, 2024

Thanks so much!! You're are a life saver!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment