You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					38 lines
				
				941 B
			
		
		
			
		
	
	
					38 lines
				
				941 B
			| 
											3 years ago
										 | // 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; | ||
|  | } |