Рефакторинг

This commit is contained in:
Book Pauk
2022-10-23 18:43:14 +07:00
parent 54f0cfec76
commit ea6d61ac6f

View File

@@ -54,6 +54,61 @@ class DbSearcher {
return where; return where;
} }
async calcIntersect(idsArr) {
return await this.heavyCalc.run({
args: idsArr,
fn: (args) => {
//из utils.intersectSet
const intersectSet = (arrSet) => {
if (!arrSet.length)
return new Set();
let min = 0;
let size = arrSet[0].size;
for (let i = 1; i < arrSet.length; i++) {
if (arrSet[i].size < size) {
min = i;
size = arrSet[i].size;
}
}
const result = new Set();
for (const elem of arrSet[min]) {
let inAll = true;
for (let i = 0; i < arrSet.length; i++) {
if (i === min)
continue;
if (!arrSet[i].has(elem)) {
inAll = false;
break;
}
}
if (inAll)
result.add(elem);
}
return result;
};
//считаем пересечение, если надо
let result = [];
if (args.length > 1) {
const arrSet = args.map(ids => new Set(ids));
result = Array.from(intersectSet(arrSet));
} else if (args.length == 1) {
result = args[0];
}
//сортировка
result.sort((a, b) => a - b);
return result;
}
});
}
async selectAuthorIds(query) { async selectAuthorIds(query) {
const db = this.db; const db = this.db;
@@ -212,60 +267,14 @@ class DbSearcher {
//сортировка //сортировка
authorIds.sort((a, b) => a - b); authorIds.sort((a, b) => a - b);
*/ */
//ищем пересечение множеств в отдельном потоке if (idsArr.length) {
idsArr.push(authorIds); //ищем пересечение множеств в отдельном потоке
authorIds = await this.heavyCalc.run({ idsArr.push(authorIds);
args: idsArr, authorIds = await this.calcIntersect(idsArr);
fn: (args) => { } else {
//из utils.intersectSet //просто сортировка
const intersectSet = (arrSet) => { authorIds.sort((a, b) => a - b);
if (!arrSet.length) }
return new Set();
let min = 0;
let size = arrSet[0].size;
for (let i = 1; i < arrSet.length; i++) {
if (arrSet[i].size < size) {
min = i;
size = arrSet[i].size;
}
}
const result = new Set();
for (const elem of arrSet[min]) {
let inAll = true;
for (let i = 0; i < arrSet.length; i++) {
if (i === min)
continue;
if (!arrSet[i].has(elem)) {
inAll = false;
break;
}
}
if (inAll)
result.add(elem);
}
return result;
};
//считаем пересечение, если надо
let result = [];
if (args.length > 1) {
const arrSet = args.map(ids => new Set(ids));
result = Array.from(intersectSet(arrSet));
} else if (args.length == 1) {
result = args[0];
}
//сортировка
result.sort((a, b) => a - b);
return result;
}
});
return authorIds; return authorIds;
} }