feat: refactor getSortedSetRange to allow big arrays
parent
7e7ea7a697
commit
b602c04463
@ -0,0 +1,31 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const helpers = module.exports;
|
||||||
|
|
||||||
|
helpers.mergeBatch = function (batchData, start, stop, sort) {
|
||||||
|
function getFirst() {
|
||||||
|
let selectedArray = batchData[0];
|
||||||
|
for (let i = 1; i < batchData.length; i++) {
|
||||||
|
if (batchData[i].length && (
|
||||||
|
!selectedArray.length ||
|
||||||
|
(sort === 1 && batchData[i][0].score < selectedArray[0].score) ||
|
||||||
|
(sort === -1 && batchData[i][0].score > selectedArray[0].score)
|
||||||
|
)) {
|
||||||
|
selectedArray = batchData[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return selectedArray.length ? selectedArray.shift() : null;
|
||||||
|
}
|
||||||
|
let item = null;
|
||||||
|
const result = [];
|
||||||
|
var st = process.hrtime();
|
||||||
|
do {
|
||||||
|
item = getFirst(batchData);
|
||||||
|
if (item) {
|
||||||
|
result.push(item);
|
||||||
|
}
|
||||||
|
} while (item && (result.length < (stop - start + 1) || stop === -1));
|
||||||
|
process.profile('meeerge', st);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
Loading…
Reference in New Issue