UNPKG

province-city-china

Version:

An util to query china province, city and district data. 中华人民共和国国家标准 GB/T 2260 行政区划代码。

72 lines (67 loc) 2.31 kB
/** * 县级(区县)信息 * @param {Array} arr 总数组 * @param {Number} code 县级(区县) code * @param {Number} level [0,1,2,3] 返回层级 */ exports.findAreaChild = function findAreaChild(arr, code, level) { return arr.filter(item => { // 四个直辖市 北京:11, 上海:31,天津:12,重庆市:50 if (/(11|31|12|50)/.test(item.province)) { return (new RegExp(`^${code}`)).test(item.code) && item.town !== 0; } return (new RegExp(`^${code}`)).test(item.code) && item.town === 0 && item.area !== 0; }).map((item) => { return { ...item }; }) } /** * 序列化省市信息 * @param {Array} arr 总数组 * @return {Array} [序列化后的层级总数组] */ exports.findCityChild = function findCityChild(arr, code, level) { return arr.filter(item => { if (/(70|81|82)/.test(item.province)) { return false; } // 四个直辖市 北京:11, 上海:31,天津:12,重庆市:50 if (/(11|31|12|50)/.test(item.province)) { return (new RegExp(`^${code}`)).test(item.code) && item.area !== 0 && item.town === 0; } return (new RegExp(`^${code}`)).test(item.code) && item.city !== 0 && item.area === 0 && item.town === 0; }).map((item) => { if (level > 1) { const codeCom = /(11|31|12|50)/.test(item.province) ? `${code}${item.city}${item.area}` : `${code}${item.city}`; item.children = findAreaChild(arr, codeCom, level); } delete item.town; delete item.province; return { ...item, // code: /(11|31|12|50)/.test(code) ? item.area : item.city, } }); } /** * 序列化 省市区信息 第一级 * @param {Array} arr 总数组 * @param {Number} level [0,1,2,3] 返回层级 * @return {Array} [序列化后的总数组] */ exports.sortProvince = function sortProvince(arr, level) { if (!level) level = 3; return arr.filter(item => item.city === 0 && item.area === 0 && item.town === 0) .map((item) => { if (level > 0) { item.children = findCityChild([...arr], item.province, level); } item.code = item.province; if (item.children && item.children.length === 0) delete item.children; delete item.province; delete item.city; delete item.area; delete item.town; return { ...item }; }); }