From 5fc7613b04e9d7fa7cb88784e0e5d1bd4b3759cf Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Sat, 13 Aug 2016 19:29:21 +0300 Subject: [PATCH 1/2] refac(fuzzy): iterative solution --- src/_common.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/_common.js b/src/_common.js index 20de683..21e1e3a 100644 --- a/src/_common.js +++ b/src/_common.js @@ -60,15 +60,23 @@ function objectContains(partial, object) { * @returns {*} */ function hasApproxPattern(word, pattern) { - if(pattern === '') - return word; - - var index = word.indexOf(pattern.charAt(0)); - - if(index === -1) - return false; - - return hasApproxPattern(word.substr(index+1), pattern.substr(1)) + // cheaper version of indexOf; instead of creating each + // iteration new str. + function indexOf(word, p, c) { + var j = 0; + while ((p + j) <= word.length) { + if (word.charAt(p + j) == c) return j; + j++; + } + return -1; + } + var p = 0; + for (var i = 0; i <= pattern.length; i++) { + var index = indexOf(word, p, pattern.charAt(i)); + if (index == -1) return false; + p += index; + } + return true } /** From a33ac4587e248f74a68e78b7566956d9a24b07af Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Sat, 13 Aug 2016 21:22:46 +0300 Subject: [PATCH 2/2] fix(common): broken test --- src/_common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_common.js b/src/_common.js index 21e1e3a..7c4acbb 100644 --- a/src/_common.js +++ b/src/_common.js @@ -74,7 +74,7 @@ function hasApproxPattern(word, pattern) { for (var i = 0; i <= pattern.length; i++) { var index = indexOf(word, p, pattern.charAt(i)); if (index == -1) return false; - p += index; + p += index + 1; } return true }