@bussin/list-comprehensions
v0.3.0-code-gen.0
Published
TypeScript list comprehensions with deferred execution.
Downloads
33
Readme
@bussin/list-comprehensions
A strongly typed list comprehension library built with TypeScript. Uses deferred execution for more performant operations. Provides prototype extensions on all Iterable<T> NodeJS classes for more fluent use (Array, Map, Set, etc., this is strictly opt-in). Inspired by LINQ.
License: MIT
Installation
npm install @bussin/list-comprehensionsQuick Start
// Extend the `Array<T>` prototype (optional)
import '@bussin/list-comprehensions/extensions/Array';
const numbers = [1, 2, 3, 4, 5];
// The `where` and `select` methods build up a query but don't run until you call `toArray()` (deferred execution).
const result = numbers
.where(n => n > 2) // Filters numbers greater than 2
.select(n => n * n) // Squares each remaining number
.toArray(); // Materializes the result
console.log(result); // [9, 16, 25]
console.log(results.any(n => n > 100)) // false
console.log(results.all(n => n > 0)) // trueWithout extending the Array prototype:
import { Enumerable } from '@bussin/list-comprehensions';
const people = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 20 },
{ name: 'Carol', age: 30 },
{ name: 'David', age: 15 },
];
const namesOfAdults = Enumerable
.from(people) // Converts Array<People> to Enumerable<People>
.where(person => person.age >= 18) // Filters people older than 18
.select(person => person.name) // Selects the persons' name
.toArray(); // Materializes the result
console.log(namesOfAdults); // ['Alice', 'Bob', 'Carol']
const youngest = Enumerable
.from(people) // Converts Array<People> to Enumerable<People>
.minBy(person => person.age); // Gets the youngest person
console.log(youngest.name); // 'David'Methods
(work in progress)
- [ ] aggregate
- [ ] aggregateBy
- [x] all
- [x] any
- [x] append
- [ ] asEnumerable
- [ ] average
- [ ] cast
- [x] chunk
- [x] concat
- [x] contains
- [x] count
- [x] countBy
- [ ] defaultIfEmpty
- [ ] distinct
- [ ] distinctBy
- [ ] elementAt
- [ ] elementAtOrDefault
- [ ] empty
- [ ] except
- [ ] exceptBy
- [ ] first
- [ ] firstOrDefault
- [ ] groupBy
- [ ] groupJoin
- [ ] index
- [ ] intersect
- [ ] intersectBy
- [ ] join
- [ ] last
- [ ] lastOrDefault
- [ ] longCount
- [ ] max
- [ ] maxBy
- [ ] min
- [x] minBy
- [ ] ofType
- [ ] order
- [ ] orderBy
- [ ] orderByDescending
- [ ] orderDescending
- [ ] prepend
- [x] range
- [x] repeat
- [x] reverse
- [x] select
- [x] selectMany
- [ ] sequenceEqual
- [ ] single
- [ ] singleOrDefault
- [x] skip
- [ ] skipLast
- [ ] skipWhile
- [ ] sum
- [x] take
- [ ] takeLast
- [ ] takeWhile
- [ ] thenBy
- [ ] thenByDescending
- [ ] toArray
- [ ] toList
- [ ] toLookup
- [ ] toMap
- [x] toRecord
- [ ] toSet
- [ ] tryGetNonEnumeratedCount
- [ ] union
- [ ] unionBy
- [x] where
- [ ] zip
Support
Please create a PR if you find any missing functionality that you's like to add. For bugs, please use the issues tracker. I'll be happy to help you!
