38 lines
		
	
	
		
			941 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			941 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | // API
 | ||
|  | module.exports = state; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Creates initial state object | ||
|  |  * for iteration over list | ||
|  |  * | ||
|  |  * @param   {array|object} list - list to iterate over | ||
|  |  * @param   {function|null} sortMethod - function to use for keys sort, | ||
|  |  *                                     or `null` to keep them as is | ||
|  |  * @returns {object} - initial state object | ||
|  |  */ | ||
|  | function state(list, sortMethod) | ||
|  | { | ||
|  |   var isNamedList = !Array.isArray(list) | ||
|  |     , initState = | ||
|  |     { | ||
|  |       index    : 0, | ||
|  |       keyedList: isNamedList || sortMethod ? Object.keys(list) : null, | ||
|  |       jobs     : {}, | ||
|  |       results  : isNamedList ? {} : [], | ||
|  |       size     : isNamedList ? Object.keys(list).length : list.length | ||
|  |     } | ||
|  |     ; | ||
|  | 
 | ||
|  |   if (sortMethod) | ||
|  |   { | ||
|  |     // sort array keys based on it's values
 | ||
|  |     // sort object's keys just on own merit
 | ||
|  |     initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) | ||
|  |     { | ||
|  |       return sortMethod(list[a], list[b]); | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   return initState; | ||
|  | } |