mirror of
https://github.com/nextapps-de/flexsearch.git
synced 2025-09-29 06:48:59 +02:00
1 line
1.4 KiB
JavaScript
1 line
1.4 KiB
JavaScript
import{create_object,concat,sort_by_length_up,get_max_len}from"./common.js";export function intersect(a,b,c,d,e,f,g){const h=a.length;let i,j,k=[];i=create_object();for(let l,m,n,o,p=0;p<b;p++)for(let b=0;b<h;b++)if(n=a[b],p<n.length&&(l=n[p]))for(let a=0;a<l.length;a++){if(m=l[a],(j=i[m])?i[m]++:(j=0,i[m]=1),o=k[j]||(k[j]=[]),!g){let a=p+(b?0:f||0);o=o[a]||(o[a]=[])}o.push(m)}const l=k.length;if(l)if(!e){if(l<h)return[];if(k=k[l-1],c||d){if(g)(k.length>c||d)&&(k=k.slice(d,c+d));else{const a=[];for(let b,e=0;e<k.length;e++){if(b=k[e],b.length>d){d-=b.length;continue}if((b.length>c||d)&&(b=b.slice(d,c+d),c-=b.length,d&&(d-=b.length)),a.push(b),!c)break}k=1<a.length?concat(a):a[0]}return k}}else k=1<k.length?union(k,d,c,g,0):(k=k[0]).length>c||d?k.slice(d,c+d):k;return k}export function union(a,b,c,d,e){const f=[],g=create_object();let h,l,m,n=a.length,o=0;if(!d){let d=get_max_len(a);for(let j=0;j<d;j++)for(let d=n-1;0<=d;d--)if(h=a[d][j],m=h&&h.length,m)for(let a=0;a<m;a++)if(l=h[a],!g[l])if(g[l]=1,b)b--;else{let a=j+(d<n-1?e||0:0);const b=f[a]||(f[a]=[]);if(b.push(l),++o===c)return f}}else for(let d=n-1;0<=d;d--){h=a[d],m=h.length;for(let a=0;a<m;a++)if(l=h[a],!g[l])if(g[l]=1,b)b--;else if(f.push(l),f.length===c)return f}return f}export function intersect_union(a,b){const c=create_object(),d=[];for(let d,e=0;e<b.length;e++){d=b[e];for(let a=0;a<d.length;a++)c[d[a]]=1}for(let e,f=0;f<a.length;f++)e=a[f],1===c[e]&&(d.push(e),c[e]=2);return d} |