array-dsl

A Dsl approach toward arrays.

Usage no npm install needed!

<script type="module">
  import arrayDsl from 'https://cdn.skypack.dev/array-dsl';
</script>

README

An array focused DSL

QA monorepo

JavaScript Style Guide CircleCI Test Coverage Maintainability Greenkeeper badge Known Vulnerabilities FOSSA Status

HitCount lerna

Installation

npm install array-dsl --save

Motivation

This is project helps you to deal with arrays in a more functional/DLS way. This is also a presentation about how easy is to craft your own dsl with the help of the dsl-framework

Usage

I present the usage of the library with the example below; there are many ways to use it, let's start with the most practically applicable one.

Examples

const example = [1,3,2,[4],[5,[6],6]]
const arrayDsl = require('array-dsl')

// flatten
let result = arrayDsl(example).flatten()
// [1,3,2,4,5,6,6]

// unique
result = arrayDsl(example).flatten.unique()
// [1,3,2,4,5,6]

// sort
result = arrayDsl(example).flatten.unique.sort()
// [1,2,3,4,5,6]

// sort
result = arrayDsl(example).flatten
  .unique.xor([1,7]).sort()
// [2,3,4,5,6,7]

// reverse
result = arrayDsl(example).flatten
  .unique.xor([1,7]).sort.reverse()
// [7,6,5,4,3,2]

// slice
result = arrayDsl(example).flatten
  .unique.xor([1,7]).sort().slice(1)()
// [3,4,5,6,7]

// randomItem
let randonItem = result = arrayDsl(example).flatten
  .unique.xor([1,7]).sort().slice(1).randomItem()
randonItem()
// this could return an item from the array [3,4,5,6,7]
// you can call it as much as you want

// union
result = arrayDsl(example).flatten
  .unique.xor([1,7]).sort().slice(1).union([1,8,2,3])()
// [1,2,3,4,5,6,7,8]

// union
result = arrayDsl([1,1,1,2,3,4,5]).union([1,8,2,3])()
// [1,2,3,4,5,8]

// if no arrify is called the same value/object is given back if it not an array
const notChanged2 = arrayDsl(3).unique.sort()
// 3


const rlastComplex = arrayDsl([1,1,1,2,3,4,5])
  .union([1,8,2,3]).last()
// 8

const first  = arrayDsl([1,2,3]).first()
// 1

// head is the alias of first
const head  = arrayDsl([1,2,3]).head()
// 1

// last
const last  = arrayDsl([1,2,3]).last()
// 3

// last + arrify
const lastAffify  = arrayDsl([1,2,3]).last.arrify()
// [3]

// Arrify transforms non array parameters to arrays
// https://www.npmjs.com/package/arrify
const arrify  = arrayDsl(3).arrify()
// [3]

const arrify  = arrayDsl(3).last.arrify()
// [3]

// if the parameter is not an array whatever 
// you do with it it will give back at the end 
// the variable you added to it.
const notChanged = arrayDsl(3)()
// 3

const flast  = arrayDsl([1,2,3]).tail()
// [1,2,3,4,5,8]

d3-array functions:

const min = arrayDsl([1,2,3].min())
// 3

const max = arrayDsl([1,2,3].max())
// 3

const extent = arrayDsl([3,2,1].extent())
// [1,3]

const sum = arrayDsl([1,2,3].sum())
// 6

const median = arrayDsl([1,2,3].median())
// 2

const quantile = arrayDsl([0,10,1000,10000].quantile(0))
// 0

const variance = arrayDsl([0,10,1000,10000].variance())
const deviation = arrayDsl([0,10,1000,10000].deviation())