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