71 lines
1.6 KiB
JavaScript
71 lines
1.6 KiB
JavaScript
|
(function (global, factory) {
|
||
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||
|
typeof define === 'function' && define.amd ? define(factory) :
|
||
|
(global = global || self, global.arrayBack = factory());
|
||
|
}(this, (function () { 'use strict';
|
||
|
|
||
|
/**
|
||
|
* Takes any input and guarantees an array back.
|
||
|
*
|
||
|
* - Converts array-like objects (e.g. `arguments`, `Set`) to a real array.
|
||
|
* - Converts `undefined` to an empty array.
|
||
|
* - Converts any another other, singular value (including `null`, objects and iterables other than `Set`) into an array containing that value.
|
||
|
* - Ignores input which is already an array.
|
||
|
*
|
||
|
* @module array-back
|
||
|
* @example
|
||
|
* > const arrayify = require('array-back')
|
||
|
*
|
||
|
* > arrayify(undefined)
|
||
|
* []
|
||
|
*
|
||
|
* > arrayify(null)
|
||
|
* [ null ]
|
||
|
*
|
||
|
* > arrayify(0)
|
||
|
* [ 0 ]
|
||
|
*
|
||
|
* > arrayify([ 1, 2 ])
|
||
|
* [ 1, 2 ]
|
||
|
*
|
||
|
* > arrayify(new Set([ 1, 2 ]))
|
||
|
* [ 1, 2 ]
|
||
|
*
|
||
|
* > function f(){ return arrayify(arguments); }
|
||
|
* > f(1,2,3)
|
||
|
* [ 1, 2, 3 ]
|
||
|
*/
|
||
|
|
||
|
function isObject (input) {
|
||
|
return typeof input === 'object' && input !== null
|
||
|
}
|
||
|
|
||
|
function isArrayLike (input) {
|
||
|
return isObject(input) && typeof input.length === 'number'
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {*} - The input value to convert to an array
|
||
|
* @returns {Array}
|
||
|
* @alias module:array-back
|
||
|
*/
|
||
|
function arrayify (input) {
|
||
|
if (Array.isArray(input)) {
|
||
|
return input
|
||
|
}
|
||
|
|
||
|
if (input === undefined) {
|
||
|
return []
|
||
|
}
|
||
|
|
||
|
if (isArrayLike(input) || input instanceof Set) {
|
||
|
return Array.from(input)
|
||
|
}
|
||
|
|
||
|
return [input]
|
||
|
}
|
||
|
|
||
|
return arrayify;
|
||
|
|
||
|
})));
|