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;
							 | 
						||
| 
								 | 
							
								}
							 |