CoolFace
Apppublic

opusdev/vector-similarity-api

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes
serialOrdered.js76 linesDownload Raw Back to asynckit
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