Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript数据库按邮政编码排序_Javascript_Database_Sorting_Postal Code - Fatal编程技术网

JavaScript数据库按邮政编码排序

JavaScript数据库按邮政编码排序,javascript,database,sorting,postal-code,Javascript,Database,Sorting,Postal Code,我需要创建一个商店的JavaScript数据库,它将按照用户指定的邮政编码进行排序。限制是,这需要完全在浏览器中运行。在用户输入他们的邮政编码后,我需要显示最近的第一个的列表,显示商店名称、城镇、县和距离(以英里为单位),并链接到另一个页面以了解更多详细信息 我曾想过在谷歌地图上显示每家店铺,并以某种方式使用它来计算用户邮政编码与最近店铺之间的距离,但不确定这是否可行 我还考虑使用创建浏览器内数据库: var shops = TAFFY([{ name: "Spaday"

我需要创建一个商店的JavaScript数据库,它将按照用户指定的邮政编码进行排序。限制是,这需要完全在浏览器中运行。在用户输入他们的邮政编码后,我需要显示最近的第一个的列表,显示商店名称、城镇、县和距离(以英里为单位),并链接到另一个页面以了解更多详细信息

我曾想过在谷歌地图上显示每家店铺,并以某种方式使用它来计算用户邮政编码与最近店铺之间的距离,但不确定这是否可行

我还考虑使用创建浏览器内数据库:

    var shops = TAFFY([{
        name: "Spaday",
        town: "Canterbury",
        county: "Kent",
        postcode: "CT1 1FG"
    }, {
        name: "BodySan",
        town: "Southend-on-Sea",
        county: "Essex",
        postcode: "SS1 1PG"
    }]);
但关键的一点是,我不知道如何实现邮政编码排序,如果用户也可以在指定范围内进行排序(例如10英里等),这将非常理想。我不需要极端的距离精度,但越精确越好

在浏览器中按邮政编码对商店进行排序的最佳方式是什么?是否有更好的方法在浏览器商店数据库中创建此功能


任何帮助都将不胜感激

我过去也做过类似的事情。 在我的场景中,我使用了一个mysql数据库,其中我指定了需要显示的所有信息(注意不要生成太大的javascript),并且我没有实现在指定半径内查找内容的可能性,只有最近的内容。 为了计算距离(从一开始就知道我的点的坐标,在您的场景中是商店),我使用获得了客户邮政编码的纬度和经度,然后您可以选择自己计算距离或使用其他API(我自己计算了距离,用客户坐标循环地图上的每个点,并保存最近的点……但你可以决定你想要什么,我认为也有API可以做到这一点)

希望这有帮助


另外,我选择了Here Maps API而不是Google Maps API,因为我需要有更多的自由来操作地图

如果你真的需要在浏览器中使用它,你也许可以用我写的这个小片段做点什么,因为我喜欢这个挑战;-)

您可以按城镇、县、zipcode部分、完整zipcode、部分zipcode进行搜索

这是非常简单的东西,希望您可以修改它以满足您的需要:-)

功能物理位置(名称、邮政编码、城镇、县){
this.name=名称;
this.postcode=邮政编码;
this.town=城镇;
this.county=县;
}
函数SearchBase(){
this.postcode={};
this.town={};
this.country={};
}
SearchBase.prototype.TOWN=1;
SearchBase.prototype.POSTCODE=2;
SearchBase.prototype.country=3;
功能邮政编码区域(键){
this.isRegion=true;
this.regionKey=key;
}
SearchBase.prototype.feed=函数(arrayList){
用于(arrayList中的项目){
var current=arrayList[项目];
var split=当前邮政编码split(“”);
var first=split[0];
var last=拆分[1];
if(此.postcode的类型[第一个]=='未定义'){
此.postcode[first]=新的邮政编码区域(first);
}
if(此.postcode的类型[第一个][最后一个]=='未定义'){
此。邮政编码[第一][最后]=[];
}
此.postcode[第一个][最后一个].push(当前);
if(this.country[当前.country]=='未定义'的类型){
this.country[当前.country]=[];
}
this.country[current.country].push(current);
if(this.town[current.town]=='undefined'的类型){
this.town[当前.town]=[];
}
this.town[current.town].push(current);
}
}
SearchBase.prototype.isPostcodeRegion=函数(什么){
返回PostcodeRegion的实例;
}
SearchBase.prototype.seek=函数(部分,searchtype){
if(typeof searchtype===‘未定义’){
抛出新错误(“是的,如果您可以定义一个searchtype,那就太好了”);
}
if(searchtype==this.TOWN){
返回此。seekByTown(部分);
}
if(searchtype==this.COUNTY){
返回此项。请参阅国家(部分);
}
if(searchtype==此邮政编码){
返回此。请参阅kbypostcode(部分);
}
抛出新错误(“提供了不支持的搜索类型”);
}
SearchBase.prototype.seekByCounty=函数(部分){
var列表=[];
map(this.country,函数(entry,key){
if(钥匙起动带(零件)){
list=list.concat(条目);
}
});
退货清单;
}
SearchBase.prototype.seekByTown=函数(部分){
var列表=[];
jQuery.map(this.town,函数(entry,key){
if(钥匙起动带(零件)){
list=list.concat(条目);
}
});
退货清单;
}
SearchBase.prototype.seekByPostcode=函数(部分){
var arr=((部分索引(“”)>-1)?部分拆分(“”):[部分];
var列表=[];
map(this.postcode,函数(entry,key){
if(key.startsWith(arr[0])){
如果(arr[0].length==3&&arr.length>1&&typeof arr[1]!='undefined'&&arr[1].length>0){
$.map(条目,函数(条目2,键2){
if(键2.startsWith(arr[1])){
list=list.concat(entry2);
}
});
}
否则{
列表。推送(输入);
}
}
});
退货清单;
}
所有代码=[new PhysicalLocation('cadbury','aaa bbb','Anywhere','conwall'),new PhysicalLocation('whoa','aaa ccc','london','where');
/**
*创建我们的数据库
**/
searchbase=新的searchbase();
/**
*用数据播种
**/
searchbase.feed(所有代码);
/**
*测试它是否有效
**/
log(searchbase.seek('con',searchbase.COUNTY));
var search=searchbase.seek('a',searchbase.POSTCODE);
用于(搜索中的部分){
if(searchbase.isPostcodeRegion(搜索[部分]){
log(“这是一个区域,包含多个邮政编码部分”,搜索[part]);
}
否则{
log(“普通邮政编码”,搜索[部分]);
}
}
log(searchbase.seek('aaa',searchbase.POSTCODE));
log(searchbase.seek('aaab',searchbase.POSTCODE));
console.log(searchbase.seek('lo',searchbase.TOWN))