最近在做小程序的过程中,有这么一个需求,需要将后台返回的地址,按省市区分割只取
【XX区、XX县】部分,于是自己封装了一个方法,经自我测试可以分割所有正确的地址,包括自治区、群岛等;如有更好的建议,愿虚心求教!
思路:
1、先将所有的省进行分割,包括自治区、行政区及市;
2、再将所有的市分割,包括行政区、县、自治州、区、行政区划、盟;
3、最后截取完省市的地址就市县、镇、乡之类的地址了。
最终测试的地址如下图:
代码部分:我是将公共方法封装在了util.js文件里,在需要的页面进行调用的;
//util.js
/**
* 省市区、自治区分割
*/
function getArea(str) {
let area = {}; //最终返回的地址
let un_pro_str = ''; //去掉省以后的地址
let un_city_str = ''; //去掉市以后的地址
// 第一个区域(省)截取开始
let _dominion = str.indexOf("自治区"); //自治区出现的位置(内蒙古自治区、广西壮族自治区、西藏自治区、宁夏回族自治区、新疆维吾尔自治区、)
let _district = str.indexOf('行政区'); //特别行政区出现的位置(香港特别行政区、澳门特别行政区)
let _province = str.indexOf("省"); //省出现的位置
let _city = str.indexOf('市'); //市出现的位置(北京市、天津市、上海市、重庆市)
if (_dominion != -1) { //有自治区
area.Province = str.substring(0, _dominion + 3)
un_pro_str = str.substr(_dominion + 3);
} else if (_province != -1) { //有省
area.Province = str.substring(0, _province + 1)
un_pro_str = str.substr(_province + 1);
} else if (_district != -1) { //有行政区
area.Province = str.substring(0, _district + 3)
un_pro_str = str.substr(_district + 3);
} else if (_city != -1) { //有市
area.Province = str.substring(0, _city + 1)
un_pro_str = str.substr(_city + 1);
}
// console.log('去掉省以后的地址', un_pro_str)
// 第二个区域(市)截取开始
let _city1 = un_pro_str.indexOf('市'); //第二次出现市的位置
let _district1 = un_pro_str.indexOf('行政区'); //特别行政区出现的位置
let _county = un_pro_str.indexOf('县'); //县出现的位置
let _state = un_pro_str.indexOf('自治州'); //自治州出现的位置
let _region = un_pro_str.indexOf('区'); //区出现的位置
let _zoning = un_pro_str.indexOf('行政区划'); //行政区划出现的位置
let _alliance = un_pro_str.indexOf('盟'); //盟出现的位置
if (_zoning != -1) { //行政区划
area.City = un_pro_str.substring(0, _zoning + 4)
un_city_str = un_pro_str.substr(_zoning + 4);
} else if (_district1 != -1) { //行政区
area.City = un_pro_str.substring(0, _district1 + 3)
un_city_str = un_pro_str.substr(_district1 + 3);
} else if (_state != -1) { //自治州
area.City = un_pro_str.substring(0, _state + 3)
un_city_str = un_pro_str.substr(_state + 3);
} else if (_alliance != -1) { //盟
area.City = un_pro_str.substring(0, _alliance + 1)
un_city_str = un_pro_str.substr(_alliance + 1);
} else if (_city1 != -1) { //市
area.City = un_pro_str.substring(0, _city1 + 1)
un_city_str = un_pro_str.substr(_city1 + 1);
} else if (_region != -1) { //区
area.City = un_pro_str.substring(0, _region + 1)
un_city_str = un_pro_str.substr(_region + 1);
} else if (_county != -1) { //县
area.City = un_pro_str.substring(0, _county + 1)
un_city_str = un_pro_str.substr(_county + 1);
}
// console.log('去掉省市以后的地址', un_city_str)
// 去掉省市后,就剩下县了,所以直接赋值
area.Country = un_city_str;
return area;
}
module.exports = {
getArea,
}
//pages/index/index.js 页面js
const util = require('../utils/util.js'); //引入公共方法,路径根据自己的项目填写
page({
/**
* 页面的初始数据
*/
data: {},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
var area = util.getArea('内蒙古自治区呼和浩特市新城区');
var area1 = util.getArea('山西省吕梁市柳林县');
var area2 = util.getArea('上海市上海市普陀区');
var area3 = util.getArea('澳门特别行政区澳门特别行政区澳门半岛');
var area4 = util.getArea('吉林省延边朝鲜族自治州安图县');
var area5 = util.getArea('湖北省恩施市家族苗族自治州恩施市');
var area6 = util.getArea('湖北省省直辖县级行政区划神农架林区');
var area7 = util.getArea('重庆市县忠县');
var area8 = util.getArea('内蒙古自治区阿拉善盟阿拉善右旗');
var area9 = util.getArea('北京市北京市昌平区');
var area10 = util.getArea('台湾省南投县鱼池乡');
var area11 = util.getArea('青海省海西蒙古族藏族自治州大柴旦行政委员会');
var area12 = util.getArea('海南省儋州市华南热作学院');
var area13 = util.getArea('海南省三沙市中沙群岛的岛礁及其海域中沙岛礁');
var area14 = util.getArea('海南省三沙市西沙群岛');
var area15 = util.getArea('广东省中山市火炬开发区');
var area16 = util.getArea('广东省东莞市东莞生态园');
var area17 = util.getArea('广东省东莞市松山湖管委会');
var area18 = util.getArea('广东省东莞市石碣镇');
var area19 = util.getArea('广东省东莞市东城街道');
var area20 = util.getArea('内蒙古自治区包头市达尔罕茂明安联合旗');
var area21 = util.getArea('河北省邢台市南宫市');
var area22 = util.getArea('河北省保定市竞秀区');
}
})