Skip to content

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
}

参数

参数名类型必填说明
regionDataRegionProvince[]行政区划数据(region.json 的内容)
codePrefixstring代码前缀(2/4/6位),用于过滤匹配的行政区划。2位过滤省份,4位过滤城市,6位过滤区县

返回值

类型说明
RandomRegionResult随机选择的行政区划路径,包含省份、城市、县/区的名称和代码

RandomRegionResult 对象属性

属性名类型说明
provincestring省份名称
provinceCodestring省份代码(6位)
citystring | null城市名称,如果省份没有城市列表(如台湾、香港、澳门)则为 null
cityCodestring | null城市代码,如果不存在则为 null
countystring | null县/区名称,如果不存在则为 null
countyCodestring | null县/区代码,如果不存在则为 null
fullPathstring完整路径字符串,如"青海省海东市化隆回族自治县"

工作原理

  1. 根据代码前缀(如果提供)过滤省份、城市和区/县:
    • 2位前缀:过滤省份代码
    • 4位前缀:过滤省份代码(前2位)和城市代码(前4位)
    • 6位前缀:过滤省份代码(前2位)、城市代码(前4位)和区/县代码(前6位)
  2. 从传入的行政区划数据中随机选择一个省份(已过滤)
  3. 如果省份有城市列表,随机选择一个城市(已过滤)
  4. 如果城市有区/县列表,随机选择一个区/县(叶子节点,已过滤)
  5. 处理特殊情况:
    • 如果省份没有城市列表(如台湾、香港、澳门),直接返回省份信息
    • 如果城市没有区/县列表,返回到城市级别
  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)