Spaces:
Running
Running
// 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; | |
} | |