   try
     return obj.forEach(iterator, context) if obj.forEach
     if _.isArray(obj) or _.isArguments(obj)
-      return iterator.call(context, item, i, obj) for item, i in obj
-    iterator.call(context, obj[key], key, obj) for key in _.keys(obj)
+      return (iterator.call(context, obj[i], i, obj) for i in [0...obj.length])
+    iterator.call(context, val, key, obj) for val, key in obj
   catch e
     throw e if e isnt breaker
   obj

_.last: array => array[array.length - 1]

# Trim out all falsy values from an array.
_.compact: array => el for el in array when el

# Return a completely flattened version of an array.
_.flatten: array =>

  args:       _.toArray(arguments)
  length:     _.max(_.pluck(args, 'length'))
  results:    new Array(length)
  (results[i]: _.pluck(args, String(i))) for i in [0...length]
  results

# If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),
