All Projects → mbasso → ienumerable

mbasso / ienumerable

Licence: MIT License
Deep immutable, Lightweight Enumerable with superpowers

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to ienumerable

Smart Array To Tree
Convert large amounts of data array to tree fastly
Stars: ✭ 91 (+44.44%)
Mutual labels:  list, array
Coinlist
Comprehensive list of cryptocurrencies with metadata
Stars: ✭ 148 (+134.92%)
Mutual labels:  list, array
An Array Of English Words
List of ~275,000 English words
Stars: ✭ 114 (+80.95%)
Mutual labels:  list, array
Mlib
Library of generic and type safe containers in pure C language (C99 or C11) for a wide collection of container (comparable to the C++ STL).
Stars: ✭ 321 (+409.52%)
Mutual labels:  list, array
go-streams
Stream Collections for Go. Inspired in Java 8 Streams and .NET Linq
Stars: ✭ 127 (+101.59%)
Mutual labels:  linq, array
Android interviews
🚀Everything you need to know to find a android job. 算法 / 面试题 / Android 知识点 🔥🔥🔥 总结不易,你的 star 是我最大的动力!
Stars: ✭ 510 (+709.52%)
Mutual labels:  list, array
Containers
This library provides various containers. Each container has utility functions to manipulate the data it holds. This is an abstraction as to not have to manually manage and reallocate memory.
Stars: ✭ 125 (+98.41%)
Mutual labels:  list, array
Typed
The TypeScript Standard Library
Stars: ✭ 124 (+96.83%)
Mutual labels:  list, immutable
Common Linq Mistakes
List of common LINQ mistakes
Stars: ✭ 109 (+73.02%)
Mutual labels:  linq, list
Netfabric.hyperlinq
High performance LINQ implementation with minimal heap allocations. Supports enumerables, async enumerables, arrays and Span<T>.
Stars: ✭ 479 (+660.32%)
Mutual labels:  linq, array
Static Frame
Immutable and grow-only Pandas-like DataFrames with a more explicit and consistent interface.
Stars: ✭ 217 (+244.44%)
Mutual labels:  immutable, array
spdx-license-ids
a list of SPDX license identifiers
Stars: ✭ 29 (-53.97%)
Mutual labels:  list, array
Immutable Array Prototype
A collection of Immutable Array prototype methods(Per method packages).
Stars: ✭ 56 (-11.11%)
Mutual labels:  immutable, array
rrbit-js
No description or website provided.
Stars: ✭ 11 (-82.54%)
Mutual labels:  immutable, array
Collectable
High-performance immutable data structures for modern JavaScript and TypeScript applications. Functional interfaces, deep/composite operations API, mixed mutability API, TypeScript definitions, ES2015 module exports.
Stars: ✭ 233 (+269.84%)
Mutual labels:  list, immutable
linqjs
Perform queries on collections in the manner of C#s System.Linq in JavaScript
Stars: ✭ 14 (-77.78%)
Mutual labels:  linq, array
linqjs
use linq and lambda in javascript on es6, can use linq function in an Object or an Array or a String value | 一个方便对数组、字典、树形数据进行操作、筛选等操作的工具库
Stars: ✭ 17 (-73.02%)
Mutual labels:  linq, array
dotnetjs
.Net Framework support in javascript/typescript.
Stars: ✭ 12 (-80.95%)
Mutual labels:  linq
sisyphus
Lists of random resources
Stars: ✭ 24 (-61.9%)
Mutual labels:  list
NonEmptyCollections
A type-safe implementation for collections that cannot be empty. Life is too short for emptiness-checks!
Stars: ✭ 45 (-28.57%)
Mutual labels:  list

IEnumerable

Build Status npm version npm downloads Coverage Status Join the chat at https://gitter.im/mbasso/ienumerable

Deep immutable, Lightweight Enumerable with superpowers


Attention - there are some important differences between IEnumerable and other existing LINQ implementations. You can find an example here and IEnumerable features explanation here.


IEnumerable is a library that allows you to create deeply immutable collections and query them with a Linq syntax. IEnumerable infact, is born from the idea to bring Linq in JavaScript environment. Linq is a fantastic technique to query data and JavaScript should have it. In addition, we want to maintain the advantages of Immutable Js and improve them. In IEnumerable, not only the collection is immutable but also its content. Every method will return a new Enumerable and a new copy of its content. IEnumerable should not be confused with Rx due to its syntax, IEnumerable and Rx are two different things that achieve different purposes. Here is an interesting question about that.

Installation

You can install IEnumerable using npm:

npm install --save ienumerable

If you aren't using npm in your project, you can include IEnumerable using UMD build in the dist folder with <script> tag.

Usage

IEnumerable exports only one class to do its work. A complete guide about usage can be found here. However, here is the gist:

import Enumerable from 'ienumerable';

// represents an Address
class Address {
  constructor(city, state, ...params) {
    this.city = city;
    this.state = state;
  }
}

// List of addresses, with:
// 8 lorem with state = 'MA'
// 6 foo with state = 'MA'
// 4 bar with state = 'MA'
// other Addresses
const AddressArray = [
  new Address('foo', 'MA'),
  new Address('foo', 'MA'),
  new Address('ipsum', 'MA'),
  new Address('foo', 'MA'),
  new Address('lorem', 'MA'),
  new Address('bar', 'MA'),
  new Address('lorem', 'MA'),
  new Address('bar', 'MA'),
  new Address('foo', 'MA'),
  new Address('foo', 'MA'),
  new Address('ipsum', 'MA'),
  new Address('foo', 'MA'),
  new Address('lorem', 'MA'),
  new Address('bar', 'MA'),
  new Address('lorem', 'MA'),
  new Address('bar', 'MA'),
  new Address('lorem', 'MA'),
  new Address('lorem', 'MA'),
  new Address('lorem', 'MA'),
  new Address('lorem', 'MA'),
  new Address('foo', 'lorem'),
  new Address('foo', 'lorem'),
  new Address('ipsum', 'loremlorem'),
  new Address('foo', 'lorem'),
  new Address('lorem', 'lorem'),
  new Address('bar', 'lorem'),
  new Address('lorem', 'lorem'),
  new Address('bar', 'lorem'),
];

/*
select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City
Having Count(1)>5
*/

// translating that select using an Enumerable
Enumerable
        .from(AddressArray)
        .where(x => x.state === 'MA')
        .groupBy(
          x => x.city,
          x => x,
          (key, items) => ({
            key,
            count: items.count(),
          })
        )
        .having(x => x.count > 5)
        .select(x => {
          city: x.key,
          count: x.count,
        })
        .toArray();
// [
//   {
//     city: 'lorem',
//     count: 8,
//   }, {
//     city: 'foo',
//     count: 6,
//   }
// ]

Documentation

Examples

You can check for examples on the official page, here.

Chat

This project has an official chat channel on gitter. This is the right place to talk about IEnumerable with us and others developers. Feel free to participate.

Join chat here.

Change Log

This project adheres to Semantic Versioning.
Every release, along with the migration instructions, is documented on the Github Releases page.

Authors

Matteo Basso

Copyright and License

Copyright (c) 2016, Matteo Basso.

IEnumerable source code is licensed under the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].