代码之家  ›  专栏  ›  技术社区  ›  Sindre Sorhus

使用jQuery快速搜索邮政编码

  •  0
  • Sindre Sorhus  · 技术社区  · 16 年前

    我在CSV文件中有如下邮政编码:

    2407;ELVERUM
    2425;TRYSIL
    2427;TRYSIL
    2446;ENGERDAL
    2448;ENGERDAL
    

    这个列表相当大,超过4000个条目,邮政编码和相应的城市。

    通过浏览器中的列表进行搜索的最快方法是什么? JSON?如果是这样,如何将列表转换为JSON或其他更好的格式?

    {
         "2407": "ELVERUM",
         "2425": "TRYSIL"
    }
    

    有人能告诉我最快的方法吗?

    更新 仅使用正则表达式搜索加载的CSV文件是否可能/更快?

    我正在寻找一个精确的匹配,它只有在有4个数字时才会搜索。

    更新3 这是我的密码:

    $('#postnummer').keyup(function(e) { 
        if($(this).val().length == 4) { 
        // Code to search the JSON for an exact match.      
        } 
    });
    
    $.getJSON("data.json",function(data){
    });
    

    3 回复  |  直到 16 年前
        1
  •  2
  •   Kelly Norton    16 年前

    对于4000个条目,您应该使用您建议的格式将其解析为JSON:

    {
         "2407": "ELVERUM",
         "2425": "TRYSIL"
    }
    

    如果您计划通过查找zipcode的精确匹配来搜索,这也将为您提供最快的搜索时间。如果您在用户键入“24”时执行某些操作,并且需要查找所有以“24”开头的Zipcode,那么您将需要更高级的操作。

    var zips = eval("(" + data + ")");
    

    或者在现代浏览器上,您可以使用更快、更安全的JSON库。

    var zips = JSON.parse(data);
    
        2
  •  2
  •   user120242    16 年前

    这是一个将CSV从URL转换为JSON的网页。您可以在计算机上本地使用它。使用JQuery和 CSV JSON 注意:此脚本是特定于给定CSV的快速破解。

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script src="http://js-tables.googlecode.com/svn/trunk/jquery.csv.min.js"></script>
    <script src="http://jquery-json.googlecode.com/files/jquery.json-1.3.min.js"></script>
    <script>
    jQuery(function($){
    
    $('#conv').click(function(){
        $.get($('#myurl').val(), function(data){
            var csvobj = {};
            var csvray = $.csv(';')(data);
            $(csvray).each(function(){
                csvobj[this[0]] = this[1];
            });
            $('#jsondata').val( "areacodes=" + $.toJSON(csvobj) );
        });
    });
    
    });
    </script>
    Url to CSV: <input type="text" id="myurl" value="tilbud5.csv" />
    <input type="button" id="conv" value="convert url to json" />
    <br/>
    <textarea id="jsondata" rows="1000" cols="100"></textarea>
    

    $('#postnummer').keyup(function(e) { 
        if($(this).val().length == 4) { 
            alert(areacodes[$(this).val()]);
        } 
    });
    
    $.getJSON("data.json?callback=?");
    
        3
  •  0
  •   airportyh    16 年前

    对于大型数据集,JSON解析会很慢。我建议您改为使用简单的自定义格式,就像您使用的格式一样:

    2407;ELVERUM
    2425;TRYSIL
    

    然后您可以像这样解析:

    var data = dataContent.split('\n').map(function(line){ return line.split(';'); })
    

    其中,数据现在是一个由两个元素组成的数组:第一个是zipcode,第二个是名称。然后,要进行搜索,您可以执行以下操作:

    var foundItems = data.filter(function(p){ return p[0].indexOf(query) != -1; });
    

    var map = {};
    dataContent.split('\n').forEach(function(line){
        var p = line.split(';');
        map[p[0]] = p[1];
    });