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