| // Inspired by Underscore's groupBy: |
| // http://documentcloud.github.com/underscore/#groupBy |
| |
| "use strict"; |
| |
| var callable = require("../../object/valid-callable") |
| , value = require("../../object/valid-value") |
| , forEach = Array.prototype.forEach |
| , apply = Function.prototype.apply; |
| |
| module.exports = function (cb /*, thisArg*/) { |
| var result; |
| |
| value(this); |
| callable(cb); |
| |
| result = Object.create(null); |
| forEach.call( |
| this, |
| function (item) { |
| var key = apply.call(cb, this, arguments); |
| if (!result[key]) result[key] = []; |
| result[key].push(item); |
| }, |
| arguments[1] |
| ); |
| return result; |
| }; |