opusdev/vector-similarity-api
1
1var iterate = require('./lib/iterate.js')2 , initState = require('./lib/state.js')3 , terminator = require('./lib/terminator.js')4 ;5 6// Public API7module.exports = serialOrdered;8// sorting helpers9module.exports.ascending = ascending;10module.exports.descending = descending;11 12/**13 * Runs iterator over provided sorted array elements in series14 *15 * @param {array|object} list - array or object (named list) to iterate over16 * @param {function} iterator - iterator to run17 * @param {function} sortMethod - custom sort function18 * @param {function} callback - invoked when all elements processed19 * @returns {function} - jobs terminator20 */21function serialOrdered(list, iterator, sortMethod, callback)22{23 var state = initState(list, sortMethod);24 25 iterate(list, iterator, state, function iteratorHandler(error, result)26 {27 if (error)28 {29 callback(error, result);30 return;31 }32 33 state.index++;34 35 // are we there yet?36 if (state.index < (state['keyedList'] || list).length)37 {38 iterate(list, iterator, state, iteratorHandler);39 return;40 }41 42 // done here43 callback(null, state.results);44 });45 46 return terminator.bind(state, callback);47}48 49/*50 * -- Sort methods51 */52 53/**54 * sort helper to sort array elements in ascending order55 *56 * @param {mixed} a - an item to compare57 * @param {mixed} b - an item to compare58 * @returns {number} - comparison result59 */60function ascending(a, b)61{62 return a < b ? -1 : a > b ? 1 : 0;63}64 65/**66 * sort helper to sort array elements in descending order67 *68 * @param {mixed} a - an item to compare69 * @param {mixed} b - an item to compare70 * @returns {number} - comparison result71 */72function descending(a, b)73{74 return -1 * ascending(a, b);75}76 