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.
		
		
		
		
		
			
		
			
				
					
					
						
							37 lines
						
					
					
						
							941 B
						
					
					
				
			
		
		
	
	
							37 lines
						
					
					
						
							941 B
						
					
					
				// 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; | 
						|
}
 | 
						|
 |