ensure-array

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

ensure-array

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 === ) 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 (===  || a === null) return [];   //   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