使用jQuery快速搜索邮政编码

时间:2009-08-11 22:00:40

标签: javascript jquery json csv

我有一个我需要使用jQuery搜索的邮政编码列表。

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

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

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

在浏览器中搜索列表的最快方法是什么? JSON?如果是这种情况,如何更好地将列表转换为JSON或其他格式?

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

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

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

UPDATE2 的 我正在寻找一个完全匹配,它只会在有4个数字的情况下进行搜索。

UPDATE3 的 这是我的代码:

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

$.getJSON("data.json",function(data){
});

有人能告诉我使用此代码吗?

3 个答案:

答案 0 :(得分:2)

在4,000个条目中,您应该使用您建议的表单将其解析为JSON:

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

如果您打算通过查找邮政编码的完全匹配进行搜索,这也将为您提供最快的搜索时间。如果你做的事情是用户键入“24”并且你需要找到所有以“24”开头的邮政编码,那么你需要更高级的东西。

我不确定jQuery为解析JSON提供了什么机制。通常的方式是使用eval:

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

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

var zips = JSON.parse(data);

答案 1 :(得分:2)

这是一个将您的CSV从URL转换为JSON的网页。您可以在计算机上本地使用它。使用JQuery以及CSVJSON插件。 注意:此脚本是特定于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>

使用JSON数据,这只是一个例子:

$('#postnummer').keyup(function(e) { 
    if($(this).val().length == 4) { 
        alert(areacodes[$(this).val()]);
    } 
});

$.getJSON("data.json?callback=?");

答案 2 :(得分:0)

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

2407;ELVERUM
2425;TRYSIL

然后你可以解析:

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

其中数据现在是一个2元素数组的数组:首先是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];
});