### 一、数据模板组成
> 数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:
```
// 属性名 name ; 生成规则 rule ; 属性值 value
'name|rule':value
```
> **说明:**
- 属性名与生成规则之前用竖线 \| 分隔
- 生成规则是可选的
- 生成规则的**含义** 需要依赖*属性值的类型*才能确定
- 属性值value中可以含有@占位符
- 属性值value指定了最终值的初始值和类型
#### **1.1 生成规则Rule**
> 生成规则的含义会因为属性值的类型不同而产生不同的作用
##### **1.1.1 规则**
> 生成规则有7种格式
1. 'name|min-max': value
2. 'name|count': value
3. 'name|min-max.dmin-dmax': value
4. 'name|min-max.dcount': value
5. 'name|count.dmin-dmax': value
6. 'name|count.dcount': value
7. 'name|+step': value
- dmin最少小数位,dmax最多小数位
- step递增
- dcount固定位数的小数位
#### **1.1.2 不同属性值对应的规则**
> **1. 值是字符串**
1. 'name|min-max':string 重复string,次数为min-max
2. 'name|count:string' 重复string ,次数为count
> **2.值是数字Number**
1. 'name|+1':number #值加1,初始值为number
2. 'name|min-max':number #生成一个min-max之前的整数
3. 'name|min-max.dmin-dmax':number #生成一个浮点数,整数部分在min-max之间,小数部分扣留dmin-dmax位
4. 'name|count.dcount':number #生成一个整数部分为count,保留dcount位小数的数
```
# 值为数字
Mock.mock({
"number|+1": 202, //202, 初始值202
"number|1-100": 100, // 83 随机1-100值
"number|1-100.1-10": 1, //23.12345 随机1-100整数加1-10位小数
"number|123.1-10": 1, //123.234 123整数加1-10位小数
"number|123.3": 1, // 123.333 123整数加3位小数
"number|123.10": 1.123 // 123.1234567890 123整数加10位小数
})
# 值为字符串
Mock.mock({
"string|1-10": "★" , //重复N次 符号(1<= N<=10)
"string|3": "★" // 重复3次
})
```
> **3.值为布尔值**
1. 'name|1': boolean
随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。
2. 'name|min-max': value
随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)。
> **4.值为对象**
1. 'name|count': object
从属性值 object 中随机选取 count 个属性。
2. 'name|min-max': object
从属性值 object 中随机选取 min 到 max 个属性。
> **5.值为数组Array**
1. 'name|1': array
从属性值 array 中随机选取 1 个元素,作为最终值。
2. 'name|+1': array'
从属性值 array 中顺序选取 1 个元素,作为最终值。
3. 'name|min-max': array
通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
4. 'name|count': array
通过重复属性值 array 生成一个新数组,重复次数为 count。
```
# 值为Boolean
Mock.mock({
'boolean|1':true //false (0.5概率)
})
# 值为Object
Mock.mock({
"object|2": {
"310000": "上海市",
"320000": "江苏省",
"330000": "浙江省",
"340000": "安徽省"
},
"object2|2-4": {
"110000": "北京市",
"120000": "天津市",
"130000": "河北省",
"140000": "山西省"
}
})
====>
{
"object": {
"310000": "上海市",
"320000": "江苏省"
},
"object2:{
"110000": "北京市",
"120000": "天津市",
"140000": "山西省"
}
}
# 值为Array
Mock.mock({
"array1 | 1": [ "AMD", "CMD", "UMD"], // UMD
"array2|+1":[ "AMD", "CMD", "UMD"], // AMD
"array3|3":["Mock.js"], // ["Mock.js","Mock.js","Mock.js"]
"array4|1-5":["Mock"], // ["Mock","Mock"]
})
```
> **6.值为正则表达式**
> 根据正则表达式regExp反向生成可以匹配它的字符串。用于生成自定义格式的字符串。
```
Mock.mock({
'regexp1':/\d{5,10}/, //561659409
'tel':/^1[3456789]\d{9}/ //18856908532
})
```
#### **1.3 模拟数据**
```
let testData = mock.mock({
'list|1-10':[{
'id:+1':1,
'tel':/^1[3456789]\d{9}/,
'address|1':['四川','北京','上海','广州'],
}]
})
// 结果
list: [
{id: 1, tel: "16727875239", address: "四川"},
{id: 2, tel: "18795168450", address: "上海"}
]
```