29 lines
		
	
	
		
			613 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			613 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// 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;
 | 
						|
};
 |