| 12345678910111213141516171819202122232425262728293031323334353637 | // APImodule.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;}
 |