# all files / array-back/ index.js

100% Statements 10/10
100% Branches 6/6
100% Functions 1/1
100% Lines 10/10

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50

    1×

    1×
    6×
    6×
    2×

    4×
    1×
    3×
    1×

    2×

     /**
     * @module array-back
     * @example
     * const arrayify = require('array-back')
     */
    module.exports = arrayify

    /**
     * Takes any input and guarantees an array back.
     *
     * - converts array-like objects (e.g. `arguments`) to a real array
     * - converts `undefined` to an empty array
     * - converts any another other, singular value (including `null`) into an array containing that value
     * - ignores input which is already an array
     *
     * @param {*} - the input value to convert to an array
     * @returns {Array}
     * @alias module:array-back
     * @example
     * > a.arrayify(undefined)
     * []
     *
     * > a.arrayify(null)
     * [ null ]
     *
     * > a.arrayify(0)
     * [ 0 ]
     *
     * > a.arrayify([ 1, 2 ])
     * [ 1, 2 ]
     *
     * > function f(){ return a.arrayify(arguments); }
     * > f(1,2,3)
     * [ 1, 2, 3 ]
     */
    function arrayify (input) {
      const t = require('typical')
      if (Array.isArray(input)) {
        return input
      } else {
        if (input === undefined) {
          return []
        } else if (t.isArrayLike(input)) {
          return Array.prototype.slice.call(input)
        } else {
          return [ input ]
        }
      }
    }