101 is a JavaScript library for dealing with immutable data in a functional manner.

### Usage

    const isObject = require('101/isObject')
    isObject({}) // → true

Every function is exposed as a module.

See: 101

### Type checking

    isObject({})
    isString('str')
    isRegExp(/regexp/)
    isBoolean(true)
    isEmpty({})
    isfunction(x => x)
    isInteger(10)
    isNumber(10.1)
    instanceOf(obj, 'string')

## Objects

### Example

    let obj = {}

#### Update

    obj = put(obj, 'user.name', 'John')
    // → { user: { name: 'John' } }

#### Read

    pluck(name, 'user.name')
    // → 'John'

#### Delete

    obj = del(obj, 'user')
    // → { }

### Getting

    pluck(state, 'user.profile.name')

    pick(state, ['user', 'ui'])
    pick(state, /^_/)

`pluck` returns values, `pick` returns subsets of objects.

See: pluck, pick

### Setting

    put(state, 'user.profile.name', 'john')

See: put

### Deleting

    del(state, 'user.profile')
    omit(state, ['user', 'data'])

`omit` is like `del`, but supports multiple keys to be deleted.

See: omit, del

### Keypath check

    hasKeypaths(state, ['user'])
    hasKeypaths(state, { 'user.profile.name': 'john' })

See: hasKeypaths

### Get values

    values(state)

## Functions

### Simple functions

`and(x, y)` | `x && y`
`or(x, y)` | `x || y`
`xor(x, y)` | `!(!x && !y) && !(x && y)`
`equals(x, y)` | `x === y`
`exists(x)` | `!!x`
`not(x)` | `!x`

Useful for function composition.

See: and, equals, exists

### Composition

    compose(f, g)       // x => f(g(x))
    curry(f)            // x => y => f(x, y)
    flip(f)             // f(x, y) --> f(y, x)

See: compose, curry, flip

### And/or

    passAll(f, g)       // x => f(x) && g(x)
    passAny(f, g)       // x => f(x) || g(x)

See: passAll, passAny

### Converge

    converge(and, [pluck('a'), pluck('b')])(x)

    // → and(pluck(x, 'a'), pluck(x, 'b'))

See: converge

## Arrays

### Finding

    find(list, x => x.y === 2)
    findIndex(list, x => ...)
    includes(list, 'item')
    last(list)

    find(list, hasProps('id'))

### Grouping

    groupBy(list, 'id')
    indexBy(list, 'id')

## Examples

### Function composition

    isFloat = passAll(isNumber, compose(isInteger, not))
    // n => isNumber(n) && not(isInteger(n))

    function doStuff (object, options) { ... }

    doStuffForce = curry(flip(doStuff))({ force: true })

## Reference

- https://github.com/tjmehta/101

0 Comments for this cheatsheet. Write yours!