Skip to content

Commit ec8e007

Browse files
authored
feat(revert): support finding data with typos (#153) (#155)
This reverts commit 8fc0645. BREAKING CHANGE: We've reverted the last release which added support for typos because it was too generous
1 parent d9b7dab commit ec8e007

2 files changed

Lines changed: 11 additions & 25 deletions

File tree

src/__tests__/index.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,6 @@ const tests: Record<string, TestCase> = {
5454
'The Tail of Forty Cities', // match2
5555
],
5656
},
57-
'matches data that has minor typos': {
58-
input: [
59-
['juptyer', 'juppyter', 'jopytar', 'jupytor', 'jepytur'],
60-
'jupyter',
61-
],
62-
output: ['juppyter', 'juptyer', 'jupytor'],
63-
},
6457
'no match for single character inputs that are not equal': {
6558
input: [['abc'], 'd'],
6659
output: [],

src/index.ts

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ function getClosenessRanking(
264264
stringToRank: string,
265265
): Ranking {
266266
let matchingInOrderCharCount = 0
267+
let charNumber = 0
267268
function findMatchingCharacter(
268269
matchChar: string,
269270
string: string,
@@ -278,31 +279,23 @@ function getClosenessRanking(
278279
}
279280
return -1
280281
}
281-
let skipped = 0
282282
function getRanking(spread: number) {
283283
const spreadPercentage = 1 / spread
284284
const inOrderPercentage = matchingInOrderCharCount / stringToRank.length
285-
const matchPercentage = (stringToRank.length - skipped) / stringToRank.length
286-
const ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage * matchPercentage
285+
const ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage
287286
return ranking as Ranking
288287
}
289-
let firstIndex = 0
290-
let charNumber = 0
291-
let nextCharNumber = 0
292-
for (let i = 0, I = stringToRank.length; i < I; i++) {
288+
const firstIndex = findMatchingCharacter(stringToRank[0], testString, 0)
289+
if (firstIndex < 0) {
290+
return rankings.NO_MATCH
291+
}
292+
charNumber = firstIndex
293+
for (let i = 1, I = stringToRank.length; i < I; i++) {
293294
const matchChar = stringToRank[i]
294-
nextCharNumber = findMatchingCharacter(matchChar, testString, charNumber)
295-
const found = nextCharNumber > -1
296-
if (found) {
297-
charNumber = nextCharNumber
298-
if (i === 0) {
299-
firstIndex = charNumber
300-
}
301-
} else if (skipped > 0 || stringToRank.length <= 3) {
302-
// if search term is short, require finding all characters
295+
charNumber = findMatchingCharacter(matchChar, testString, charNumber)
296+
const found = charNumber > -1
297+
if (!found) {
303298
return rankings.NO_MATCH
304-
} else {
305-
skipped += 1
306299
}
307300
}
308301

0 commit comments

Comments
 (0)