extra-ilists
Version:
ILists is a pair of key iterable list and value iterable list, with unique keys.
228 lines (208 loc) ⢠10.7 kB
Markdown
**ILists** is a *pair* of *key iterable list* and *value iterable list*, with *unique keys*.<br>
š¦ [Node.js](https://www.npmjs.com/package/extra-ilists),
š [Web](https://www.npmjs.com/package/extra-ilists.web),
š [Files](https://unpkg.com/extra-ilists/),
š° [Docs](https://nodef.github.io/extra-ilists/),
š [Wiki](https://github.com/nodef/extra-ilists/wiki/).
As mentioned above, **ILists** is a data structure that consists of a *pair of*
*iterable lists*, one for *keys* and one for *values*. The keys are **unique**,
meaning there are no duplicate entries. **ILists** is an iterable version of
[Lists]. Use it when you don't have the keys and values as [Arrays].
This package includes functions that allow you to query *about*, *generate*,
*compare*, and *manipulate* the data within the **ILists**. You can find out its
*size*, *add* and *remove* entries, obtain its *properties*, get *parts* or
*subsets* of the data, *find* specific entries within it, perform *functional*
operations, *combine* **ILists** or its sub-entries, or perform *set operations*
upon it. Except `fromEntries()`, all functions take **ILists** as their first
parameter.
This package is available in *Node.js* and *Web* formats. To use it on the web,
simply use the `extra_ilists` global variable after loading with a `<script>` tag
from the [jsDelivr CDN].
> Stability: [Experimental](https://www.youtube.com/watch?v=L1j93RnIxEo).
[Lists]: https://www.npmjs.com/package/extra-lists
[Arrays]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
[jsDelivr CDN]: https://cdn.jsdelivr.net/npm/extra-ilists.web/index.js
<br>
```javascript
const xilists = require('extra-ilists');
// import * as xilists from 'extra-ilists';
// import * as xilists from 'https://unpkg.com/extra-ilists/index.mjs'; (deno)
var x = [['a', 'b', 'c', 'd', 'e'], [1, 2, 3, 4, 5]];
xilists.filter(x, v => v % 2 === 1);
// ā [ [ 'a', 'c', 'e' ], [ 1, 3, 5 ] ]
var x = [['a', 'b', 'c', 'd'], [1, 2, -3, -4]];
xilists.some(x, v => v > 10);
// ā false
var x = [['a', 'b', 'c', 'd'], [1, 2, -3, -4]];
xilists.min(x);
// ā -4
var x = [['a', 'b', 'c'], [1, 2, 3]];
[...xilists.subsets(x)].map(a => [[...a[0]], [...a[1]]]);
// ā [
// ā [ [], [] ],
// ā [ [ 'a' ], [ 1 ] ],
// ā [ [ 'b' ], [ 2 ] ],
// ā [ [ 'a', 'b' ], [ 1, 2 ] ],
// ā [ [ 'c' ], [ 3 ] ],
// ā [ [ 'a', 'c' ], [ 1, 3 ] ],
// ā [ [ 'b', 'c' ], [ 2, 3 ] ],
// ā [ [ 'a', 'b', 'c' ], [ 1, 2, 3 ] ]
// ā ]
```
<br>
<br>
## Index
| Property | Description |
| ---- | ---- |
| [is] | Check if value is ilists. |
| [keys] | List all keys. |
| [values] | List all values. |
| [entries] | List all key-value pairs. |
| | |
| [fromEntries] | Convert ilists to entries. |
| | |
| [size] | Find the size of ilists. |
| [isEmpty] | Check if ilists is empty. |
| | |
| [compare] | Compare two ilists. |
| [isEqual] | Check if two ilists are equal. |
| | |
| [get] | Get value at key. |
| [getAll] | Gets values at keys. |
| [getPath] | Get value at path in nested ilists. |
| [hasPath] | Check if nested ilists has a path. |
| [set] | Set value at key. |
| [swap] | Exchange two values. |
| [remove] | Remove value at key. |
| | |
| [head] | Get first entry from ilists (default order). |
| [tail] | Get ilists without its first entry (default order). |
| [take] | Keep first n entries only (default order). |
| [drop] | Remove first n entries (default order). |
| | |
| [count] | Count values which satisfy a test. |
| [countAs] | Count occurrences of values. |
| [min] | Find smallest value. |
| [minEntry] | Find smallest entry. |
| [max] | Find largest value. |
| [maxEntry] | Find largest entry. |
| [range] | Find smallest and largest values. |
| [rangeEntries] | Find smallest and largest entries. |
| | |
| [subsets] | List all possible subsets. |
| [randomKey] | Pick an arbitrary key. |
| [randomValue] | Pick an arbitrary value. |
| [randomEntry] | Pick an arbitrary entry. |
| [randomSubset] | Pick an arbitrary subset. |
| | |
| [has] | Check if ilists has a key. |
| [hasValue] | Check if ilists has a value. |
| [hasEntry] | Check if ilists has an entry. |
| [hasSubset] | Check if ilists has a subset. |
| [find] | Find first value passing a test (default order). |
| [findAll] | Find values passing a test. |
| [search] | Finds key of an entry passing a test. |
| [searchAll] | Find keys of entries passing a test. |
| [searchValue] | Find a key with given value. |
| [searchValueAll] | Find keys with given value. |
| | |
| [forEach] | Call a function for each value. |
| [some] | Check if any value satisfies a test. |
| [every] | Check if all values satisfy a test. |
| [map] | Transform values of entries. |
| [reduce] | Reduce values of entries to a single value. |
| [filter] | Keep entries which pass a test. |
| [filterAt] | Keep entries with given keys. |
| [reject] | Discard entries which pass a test. |
| [rejectAt] | Discard entries with given keys. |
| [flat] | Flatten nested ilists to given depth. |
| [flatMap] | Flatten nested ilists, based on map function. |
| [zip] | Combine matching entries from all ilists. |
| | |
| [partition] | Segregate values by test result. |
| [partitionAs] | Segregate entries by similarity. |
| [chunk] | Break ilists into chunks of given size. |
| | |
| [concat] | Append entries from all ilists, preferring last. |
| [join] | Join ilists together into a string. |
| | |
| [isDisjoint] | Check if ilists have no common keys. |
| [unionKeys] | Obtain keys present in any ilists. |
| [union] | Obtain entries present in any ilists. |
| [intersection] | Obtain entries present in both ilists. |
| [difference] | Obtain entries not present in another ilists. |
| [symmetricDifference] | Obtain entries not present in both ilists. |
<br>
<br>
[](https://www.youtube.com/watch?v=8O0Nt9qY_vo)
[](https://nodef.github.io)
[](https://coveralls.io/github/nodef/extra-ilists?branch=master)
[](https://codeclimate.com/github/nodef/extra-ilists/test_coverage)
[](https://codeclimate.com/github/nodef/extra-ilists/maintainability)

[is]: https://github.com/nodef/extra-ilists/wiki/is
[keys]: https://github.com/nodef/extra-ilists/wiki/keys
[values]: https://github.com/nodef/extra-ilists/wiki/values
[entries]: https://github.com/nodef/extra-ilists/wiki/entries
[fromEntries]: https://github.com/nodef/extra-ilists/wiki/fromEntries
[size]: https://github.com/nodef/extra-ilists/wiki/size
[isEmpty]: https://github.com/nodef/extra-ilists/wiki/isEmpty
[compare]: https://github.com/nodef/extra-ilists/wiki/compare
[isEqual]: https://github.com/nodef/extra-ilists/wiki/isEqual
[get]: https://github.com/nodef/extra-ilists/wiki/get
[getAll]: https://github.com/nodef/extra-ilists/wiki/getAll
[getPath]: https://github.com/nodef/extra-ilists/wiki/getPath
[hasPath]: https://github.com/nodef/extra-ilists/wiki/hasPath
[set]: https://github.com/nodef/extra-ilists/wiki/set
[swap]: https://github.com/nodef/extra-ilists/wiki/swap
[remove]: https://github.com/nodef/extra-ilists/wiki/remove
[head]: https://github.com/nodef/extra-ilists/wiki/head
[tail]: https://github.com/nodef/extra-ilists/wiki/tail
[take]: https://github.com/nodef/extra-ilists/wiki/take
[drop]: https://github.com/nodef/extra-ilists/wiki/drop
[count]: https://github.com/nodef/extra-ilists/wiki/count
[countAs]: https://github.com/nodef/extra-ilists/wiki/countAs
[min]: https://github.com/nodef/extra-ilists/wiki/min
[minEntry]: https://github.com/nodef/extra-ilists/wiki/minEntry
[max]: https://github.com/nodef/extra-ilists/wiki/max
[maxEntry]: https://github.com/nodef/extra-ilists/wiki/maxEntry
[range]: https://github.com/nodef/extra-ilists/wiki/range
[rangeEntries]: https://github.com/nodef/extra-ilists/wiki/rangeEntries
[subsets]: https://github.com/nodef/extra-ilists/wiki/subsets
[randomKey]: https://github.com/nodef/extra-ilists/wiki/randomKey
[randomValue]: https://github.com/nodef/extra-ilists/wiki/randomValue
[randomEntry]: https://github.com/nodef/extra-ilists/wiki/randomEntry
[randomSubset]: https://github.com/nodef/extra-ilists/wiki/randomSubset
[has]: https://github.com/nodef/extra-ilists/wiki/has
[hasValue]: https://github.com/nodef/extra-ilists/wiki/hasValue
[hasEntry]: https://github.com/nodef/extra-ilists/wiki/hasEntry
[hasSubset]: https://github.com/nodef/extra-ilists/wiki/hasSubset
[find]: https://github.com/nodef/extra-ilists/wiki/find
[findAll]: https://github.com/nodef/extra-ilists/wiki/findAll
[search]: https://github.com/nodef/extra-ilists/wiki/search
[searchAll]: https://github.com/nodef/extra-ilists/wiki/searchAll
[searchValue]: https://github.com/nodef/extra-ilists/wiki/searchValue
[searchValueAll]: https://github.com/nodef/extra-ilists/wiki/searchValueAll
[forEach]: https://github.com/nodef/extra-ilists/wiki/forEach
[some]: https://github.com/nodef/extra-ilists/wiki/some
[every]: https://github.com/nodef/extra-ilists/wiki/every
[map]: https://github.com/nodef/extra-ilists/wiki/map
[reduce]: https://github.com/nodef/extra-ilists/wiki/reduce
[filter]: https://github.com/nodef/extra-ilists/wiki/filter
[filterAt]: https://github.com/nodef/extra-ilists/wiki/filterAt
[reject]: https://github.com/nodef/extra-ilists/wiki/reject
[rejectAt]: https://github.com/nodef/extra-ilists/wiki/rejectAt
[flat]: https://github.com/nodef/extra-ilists/wiki/flat
[flatMap]: https://github.com/nodef/extra-ilists/wiki/flatMap
[zip]: https://github.com/nodef/extra-ilists/wiki/zip
[partition]: https://github.com/nodef/extra-ilists/wiki/partition
[partitionAs]: https://github.com/nodef/extra-ilists/wiki/partitionAs
[chunk]: https://github.com/nodef/extra-ilists/wiki/chunk
[concat]: https://github.com/nodef/extra-ilists/wiki/concat
[join]: https://github.com/nodef/extra-ilists/wiki/join
[isDisjoint]: https://github.com/nodef/extra-ilists/wiki/isDisjoint
[unionKeys]: https://github.com/nodef/extra-ilists/wiki/unionKeys
[union]: https://github.com/nodef/extra-ilists/wiki/union
[intersection]: https://github.com/nodef/extra-ilists/wiki/intersection
[difference]: https://github.com/nodef/extra-ilists/wiki/difference
[symmetricDifference]: https://github.com/nodef/extra-ilists/wiki/symmetricDifference