Home Reference Source Test Repository

lib/uncons.js

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.uncons = uncons;

var _head = require('./head');

var _tail = require('./tail');

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }

/**
 * Decomposes a list into its head and tail.
 *
 * @since v0.1.0
 * @param {Array|String} list
 * @return {Array}
 * @example
 *   uncons(range(1, 11)) // => [[1], [2, 3, 4, 5, 6, 7, 8, 9, 10]]
 *   uncons([1, 2, 3]) //=> [[1], [2, 3]]
 *   uncons([]) //=> undefined
 *
 *   uncons('abc') //=> [['a'], ['b', 'c']]
 *   uncons('ze') // => [['z'], ['e']]
 *   uncons('q') // => ['q']
 *   uncons('') //=> undefined
 */
function uncons(list) {
    if (list.length === 0) return undefined;
    return list.length > 1 ? [[(0, _head.head)(list)], [].concat(_toConsumableArray((0, _tail.tail)(list)))] : [].concat(_toConsumableArray(list));
}