সমস্যা বিবরণ
একটি স্ট্রিং মেথড লিখতে হবে যা একটি সার্চ কুয়েরি लेकर루জলি (loosely) চেক করবে যে কুয়েরির অক্ষরগুলো একই অর্ডারে স্ট্রিংয়ে আছে কিনা।
উদাহরণ:
('a haystack with a needle').fuzzySearch('hay sucks'); // false
('a haystack with a needle').fuzzySearch('sack hand'); // true
সমাধান
const fuzzySearch = function(query) {
const str = this.toLowerCase();
let i = 0, n = -1, l;
query = query.toLowerCase();
for (; l = query[i++]; ) {
if (!~(n = str.indexOf(l, n + 1))) {
return false;
}
}
return true;
};
String.prototype.fuzzySearch = fuzzySearch;
console.log(('a haystack with a needle').fuzzySearch('hay sucks')); // false
console.log(('a haystack with a needle').fuzzySearch('sack hand')); // true
আউটপুট
false true
কীভাবে কাজ করে
str.indexOf(l, n + 1)দিয়ে প্রতিটি ক্যারেক্টার পূর্বের পজিশনের পর থেকে খোঁজা হয়।!~হলো বিটওয়াইজ NOT:indexOf-1 রিটার্ন করলে~(-1) === 0(falsy), অন্যথায়Truthy।- সব ক্যারেক্টার ক্রমাগত পাওয়া গেলে
true।
সতর্কতা
String.prototype এক্সটেন্ড করা সাধারণত এড়ানো উচিত প্রোডাকশন কোডে।