MCPcopy
hub / github.com/farzher/fuzzysort / go

Function go

fuzzysort.js:23–170  ·  view source on GitHub ↗
(search, targets, options)

Source from the content-addressed store, hash-verified

21 }
22
23 var go = (search, targets, options) => {
24 if(!search) return options?.all ? all(targets, options) : noResults
25
26 var preparedSearch = getPreparedSearch(search)
27 var searchBitflags = preparedSearch.bitflags
28 var containsSpace = preparedSearch.containsSpace
29
30 var threshold = denormalizeScore( options?.threshold || 0 )
31 var limit = options?.limit || INFINITY
32
33 var resultsLen = 0; var limitedCount = 0
34 var targetsLen = targets.length
35
36 function push_result(result) {
37 if(resultsLen < limit) { q.add(result); ++resultsLen }
38 else {
39 ++limitedCount
40 if(result._score > q.peek()._score) q.replaceTop(result)
41 }
42 }
43
44 // This code is copy/pasted 3 times for performance reasons [options.key, options.keys, no keys]
45
46 // options.key
47 if(options?.key) {
48 var key = options.key
49 for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]
50 var target = getValue(obj, key)
51 if(!target) continue
52 if(!isPrepared(target)) target = getPrepared(target)
53
54 if((searchBitflags & target._bitflags) !== searchBitflags) continue
55 var result = algorithm(preparedSearch, target)
56 if(result === NULL) continue
57 if(result._score < threshold) continue
58
59 result.obj = obj
60 push_result(result)
61 }
62
63 // options.keys
64 } else if(options?.keys) {
65 var keys = options.keys
66 var keysLen = keys.length
67
68 outer: for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]
69
70 { // early out based on bitflags
71 var keysBitflags = 0
72 for (var keyI = 0; keyI < keysLen; ++keyI) {
73 var key = keys[keyI]
74 var target = getValue(obj, key)
75 if(!target) { tmpTargets[keyI] = noTarget; continue }
76 if(!isPrepared(target)) target = getPrepared(target)
77 tmpTargets[keyI] = target
78
79 keysBitflags |= target._bitflags
80 }

Callers

nothing calls this directly

Calls 8

allFunction · 0.85
getPreparedSearchFunction · 0.85
denormalizeScoreFunction · 0.85
getValueFunction · 0.85
isPreparedFunction · 0.85
getPreparedFunction · 0.85
algorithmFunction · 0.85
push_resultFunction · 0.85

Tested by

no test coverage detected