Ensure that an object is an array. Moves error checking out of your code.


Simple convenience function which ensures that you are dealing with an array and you can eliminate noise from your code.

For Example:

  var array = require('ensure-array');
  function foo(bar) {
    array(bar).forEach(function (x) {
      //do something with each item 

Instead of doing something like this:

  function foo(bar) {
    if (bar === undefined) return;
    if (bar === null) return;
    if (!Array.isArray(bar)) bar = [bar];
    bar.forEach(function (x) {
      //do something with each item 

It gets rid of the noise and coerces what is provided into an array, so you do not have to litter your code with a bunch of extraneous checks.

Here is the logic behind the function:

  1. if nothing passed to the function return empty array []
  2. if single argument passed is undefined or null return empty array []
  3. if single argument passed is already an array, return it unchanged
  4. otherwise return array containing all of the arguments

Here is the actual code which makes it happen

module.exports = function array(abn) {
 if (arguments.length === 0) return [];            //no args, ret [] 
 if (arguments.length === 1) {                     //single argument 
   if (=== undefined || a === null) return [];   //  undefined or null, ret [] 
   if (Array.isArray(a)) return a;                 //  isArray, return it 
 return Array.prototype.slice.call(arguments);     //return array with copy of all arguments 
  npm install ensure-array
  var array = require('ensure-array');  // get handle to the function 
  var foo = array(whatever);               // foo will now safely be an array 
  • 2011-12-08 - 0.0.4 - Update tapr / tap versions
  • 2011-12-01 - 0.0.3 - Updated to support any version of Node.js
  • Author: Jeff Barczewski (@jeffbski)
  • Source code repository: http://github.com/jeffbski/ensure-array
  • Ideas and pull requests are encouraged - http://github.com/jeffbski/ensure-array/issues
  • You may contact me at @jeffbski or through github at http://github.com/jeffbski