原数据(txt格式)
CN1100 PROVINCE 北京市
CN1101 CITY 北京市-北京市
CN1300 PROVINCE 河北省
CN1303 CITY 河北省-秦皇岛市
CN1309 CITY 河北省-沧州市
CN1311 CITY 河北省-衡水市
CN3500 PROVINCE 福建省
CN3501 CITY 福建省-福州市
CN3503 CITY 福建省-莆田市
CN3600 PROVINCE 江西省
CN3601 CITY 江西省-南昌市
CN3609 CITY 江西省-宜春市
CN3611 CITY 江西省-上饶市
期望的JSON格式
[
{
"code": "CN11",
"province": "北京市",
"city": [
{
"code": "01",
"name": "北京市"
}
]
},
{
"code": "CN13",
"province": "河北省",
"city": [
{
"code": "03",
"name": "秦皇岛市"
},
{
"code": "09",
"name": "沧州市"
},
{
"code": "11",
"name": "衡水市"
}
]
},
{
"code": "CN35",
"province": "福建省",
"city": [
{
"code": "01",
"name": "福州市"
},
{
"code": "03",
"name": "莆田市"
}
]
},
{
"code": "CN36",
"province": "江西省",
"city": [
{
"code": "01",
"name": "南昌市"
},
{
"code": "09",
"name": "宜春市"
},
{
"code": "11",
"name": "上饶市"
}
]
}
]
步骤:
1、观察原TXT文件格式,发现每一行换行了,即使用‘/n’隔开
2、str=`(txt里的数据)`,let arrStr = str.split('\n');
console.log(arrStr)后发现,每行里一个小字符串之间由tab隔开,即使用‘/t’隔开
3、以分割的思维来写代码,多次对字符串运用split
let arrStr = str.split('\n');
let zoneList = [];
arrStr.map(i => { //调用数组的每个元素i
let item = i.split('\t');
//没有'-'分割,即 省 的字段
// 例如:CN1300 PROVINCE 河北省
if (i.indexOf("-") == -1) {
zoneList.push({
code: item[0].slice(0, 4),
province: item[2],
city: []
})
} else {
//例如 福建省-福州市
let city = item[2].split('-');
//找到 河北省与河北省-秦皇岛市、河北省-沧州市、河北省-衡水市,-前名字相同的
//并只返回一条(这个很关键)
let cur = zoneList.find(j => j.province == city[0])
cur.city.push({
code: item[0].slice(4, 6),
name: city[1]
})
}
})
//最后输出在控制台上内容太多最好序列化下才看得到
console.log(JSON.stringify(zoneList));
网友评论