From 240c499daa0965f4731135e25d33719d25c608e6 Mon Sep 17 00:00:00 2001 From: Christian Pilegaard Cederquist Date: Thu, 22 May 2025 22:47:13 +0200 Subject: [PATCH] Improve performance of getMatchRankings by replacing 4 string comparisons with a single indexOf --- src/index.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 7972c0e..317ac3f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -196,23 +196,26 @@ function getMatchRanking( testString = testString.toLowerCase() stringToRank = stringToRank.toLowerCase() + // Use indexOf to check for equality/includes + const indexOfStringToRankInTestString = testString.indexOf(stringToRank) + // case insensitive equals - if (testString === stringToRank) { + if (testString.length === stringToRank.length && indexOfStringToRankInTestString === 0) { return rankings.EQUAL } // starts with - if (testString.startsWith(stringToRank)) { + if (indexOfStringToRankInTestString === 0) { return rankings.STARTS_WITH } // word starts with - if (testString.includes(` ${stringToRank}`)) { + if (indexOfStringToRankInTestString > 0 && testString[indexOfStringToRankInTestString-1] === ' ') { return rankings.WORD_STARTS_WITH } // contains - if (testString.includes(stringToRank)) { + if (indexOfStringToRankInTestString > 0) { return rankings.CONTAINS } else if (stringToRank.length === 1) { // If the only character in the given stringToRank