randomRegion
从行政区划数据中随机选择一条完整路径(省-市-县/区)。该函数从 region.json 数据中随机遍历树状结构,找到一条从省份到县/区(叶子节点)的完整路径。
函数签名
typescript
function randomRegion(regionData: RegionProvince[], codePrefix?: string): RandomRegionResult
interface RegionProvince {
name: string
code: string
city?: RegionCity[]
}
interface RegionCity {
name: string
code: string
area?: Array<{ name: string; code: string }>
}
interface RandomRegionResult {
/** 省份名称 */
province: string
/** 省份代码(6位) */
provinceCode: string
/** 城市名称(如果存在) */
city: string | null
/** 城市代码(如果存在) */
cityCode: string | null
/** 县/区名称(如果存在) */
county: string | null
/** 县/区代码(如果存在) */
countyCode: string | null
/** 完整路径,如"青海省海东市化隆回族自治县" */
fullPath: string
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
regionData | RegionProvince[] | 是 | 行政区划数据(region.json 的内容) |
codePrefix | string | 否 | 代码前缀(2/4/6位),用于过滤匹配的行政区划。2位过滤省份,4位过滤城市,6位过滤区县 |
返回值
| 类型 | 说明 |
|---|---|
RandomRegionResult | 随机选择的行政区划路径,包含省份、城市、县/区的名称和代码 |
RandomRegionResult 对象属性
| 属性名 | 类型 | 说明 |
|---|---|---|
province | string | 省份名称 |
provinceCode | string | 省份代码(6位) |
city | string | null | 城市名称,如果省份没有城市列表(如台湾、香港、澳门)则为 null |
cityCode | string | null | 城市代码,如果不存在则为 null |
county | string | null | 县/区名称,如果不存在则为 null |
countyCode | string | null | 县/区代码,如果不存在则为 null |
fullPath | string | 完整路径字符串,如"青海省海东市化隆回族自治县" |
工作原理
- 根据代码前缀(如果提供)过滤省份、城市和区/县:
- 2位前缀:过滤省份代码
- 4位前缀:过滤省份代码(前2位)和城市代码(前4位)
- 6位前缀:过滤省份代码(前2位)、城市代码(前4位)和区/县代码(前6位)
- 从传入的行政区划数据中随机选择一个省份(已过滤)
- 如果省份有城市列表,随机选择一个城市(已过滤)
- 如果城市有区/县列表,随机选择一个区/县(叶子节点,已过滤)
- 处理特殊情况:
- 如果省份没有城市列表(如台湾、香港、澳门),直接返回省份信息
- 如果城市没有区/县列表,返回到城市级别
- 返回完整的行政区划信息,包括各级名称、代码和完整路径字符串
使用示例
typescript
import regionData from '../assets/region.json'
import { randomRegion } from 'zcw-shared/functions/utils/randomRegion'
// 随机选择一个行政区划
const result = randomRegion(regionData)
// 可能返回:
// {
// province: '青海省',
// provinceCode: '630000',
// city: '海东市',
// cityCode: '630200',
// county: '化隆回族自治县',
// countyCode: '630224',
// fullPath: '青海省海东市化隆回族自治县'
// }
console.log(result.fullPath) // "青海省海东市化隆回族自治县"
// 使用代码前缀过滤(2位:省份)
const result2 = randomRegion(regionData, '43')
// 只会返回湖南省(43开头)的行政区划
// 使用代码前缀过滤(4位:城市)
const result3 = randomRegion(regionData, '4309')
// 只会返回益阳市(4309开头)的区县
// 使用代码前缀过滤(6位:区县)
const result4 = randomRegion(regionData, '430901')
// 只会返回精确匹配的区县(430901)