JS LINQ Equivalents

JS and ES6 equivalent statements for .NET LINQ methods.

by ardalis

HTML

<pre id="output"></pre>

JavaScript

/*jshint esversion: 6 */
// JS array equivalents to C# LINQ methods - by Dan B.
// Original source: https://gist.github.com/DanDiplo/30528387da41332ff22b
function out()
{
    var args = Array.prototype.slice.call(arguments, 0);
    var formatted = args.map(a => {
    	  if(isObject(a)) {
    	    return JSON.stringify(a);
        }
        return a;
      });
    document.getElementById('output').innerHTML += formatted.join(" ") + "\n";
}
function isObject(obj) {
  return obj === Object(obj);
}
// 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;
});

// ES6 syntax
let youngsters2 = people.filter(p => p.age < 30);

out("People younger than 30");
out(JSON.stringify(youngsters));
out(youngsters2);
out();


// map is equivalent to Select
var names = people.map(function (item) {
	return item.name;
});
// ES6 syntax
let names2 = people.map(i => i.name);

out("Just the names of people");
out(names);
out(names2);
out();


// every is equivalent to All
var allUnder40 = people.every(function (item) {
	return  item.age < 40;
});
let allUnder402 = people.every(i => i < 40);

out("Are all people under 40?"); // false
out(allUnder40);
out(allUnder402);
out();

// some is equivalent to Any

var anyUnder30 = people.some(function (item) {
	return  item.age < 30;
});
let anyUnder302 = people.some(p => p.age < 30);

out("Are any people under 30?"); 
out(anyUnder30); // true
out(anyUnder302); // true
out();

// 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 };
});
// note () around object: https://stackoverflow.com/a/28770578/13729
let aggregate2 = people.reduce((a,b)...