How to implement sublime text like fuzzy search?

前端 未结 7 2015
小蘑菇
小蘑菇 2020-12-24 12:41

How can i implement a sublime-like fuzzy search on select2?

Example, typing \"sta jav sub\" would match \"Stackoverflow javascript sublime like\"

7条回答
  •  别那么骄傲
    2020-12-24 13:22

    var fuzzysearch = function (querystrings, values) {
        return !querystrings.some(function (q) {
            return !values.some(function (v) {
                return v.toLocaleLowerCase().indexOf(q) !== -1;
            });
        });
    }
    

    Example searching for title and author in book collection http://jsfiddle.net/runjep/r887etnh/2/

    For a 9kb alternative which ranks the search result: http://kiro.me/projects/fuse.html

    You may need a polyfill for the 'some' function https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

    var books = [{
        id: 1,
        title: 'The Great Gatsby',
        author: 'F. Scott Fitzgerald'
    }, {
        id: 2,
        title: 'The DaVinci Code',
        author: 'Dan Brown'
    }, {
        id: 3,
        title: 'Angels & Demons',
        author: 'Dan Brown'
    }];
    search = function () {
        var queryarray = document.getElementById('inp').value.trim().toLowerCase().split(' ');
        var res = books.filter(function (b) {
            return fs(queryarray, [b.title, b.author]);
        });
        document.getElementById('res').innerHTML = res.map(function (b) {
            return b.title + '  ' + b.author + '';
        }).join('
    '); } fs = function (qs, vals) { return !qs.some(function (q) { return !vals.some(function (v) { return v.toLocaleLowerCase().indexOf(q) !== -1; }); }); }
    
    
    

提交回复
热议问题