function initial(array, callback, thisArg) {
      var n = 0,
          length = array ? array.length : 0;

      if (typeof callback != 'number' && callback != null) {
        var index = length;
        callback = lodash.createCallback(callback, thisArg, 3);
        while (index-- && callback(array[index], index, array)) {
          n++;
        }
      } else {
        n = (callback == null || thisArg) ? 1 : callback || n;
      }
      n = length - n;
      return slice(array, 0, n > 0 ? n : 0);
    }
Gets all but the last element or last `n` elements of an array. If a
callback is provided elements at the end of the array are excluded from
the result as long as the callback returns truey. The callback is bound
to `thisArg` and invoked with three arguments; (value, index, array).

If a property name is provided for `callback` the created "_.pluck" style
callback will return the property value of the given element.

If an object is provided for `callback` the created "_.where" style callback
will return `true` for elements that have the properties of the given object,
else `false`.

@static
@memberOf _
@category Arrays
@param {Array} array The array to query.
@param {Function|Object|number|string} [callback=1] The function called
 per element or the number of elements to exclude. If a property name or
 object is provided it will be used to create a "_.pluck" or "_.where"
 style callback, respectively.
@param {*} [thisArg] The `this` binding of `callback`.
@returns {Array} Returns a slice of `array`.
@example

_.initial([1, 2, 3]);
// => [1, 2]

// excludes the last two elements
_.initial([1, 2, 3], 2);
// => [1]

// excludes elements from the end until the callback fails
_.initial([1, 2, 3], function(num) {
  return num > 1;
});
// => [1]

var characters = [
  { 'name': 'barney',  'employer': 'slate' },
  { 'name': 'fred',    'employer': 'slate', 'blocked': true },
  { 'name': 'pebbles', 'employer': 'na',    'blocked': true }
];

// using "_.pluck" callback shorthand
_.initial(characters, 'blocked');
// => [{ 'name': 'barney',  'blocked': false, 'employer': 'slate' }]

// using "_.where" callback shorthand
_.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
// => ['barney', 'fred']