# 数组验证

URL: https://caijiao.org/yup/array
Source: docs/yup/array.md
Description: 展示 Yup 在数组字段中的应用，包括数组长度、元素类型和自定义规则。

Yup 可以对数组类型进行验证，支持数组长度、元素类型及自定义规则。

## 导入方式

```js
import { array, object, string, number } from 'yup';
````

## 基本数组验证

```js
const schema = array().of(string().required()).min(1, "至少有一个元素");
```

* `array()`：定义数组类型
* `of(schema)`：数组中的每个元素必须符合指定 Schema
* `min(n, message)` / `max(n, message)`：限制数组长度

## 数组中对象验证

```js
const schema = array().of(
  object({
    name: string().required(),
    age: number().positive().integer()
  })
);
```

* 数组元素可以是对象
* 对象内部可以使用任意 Yup 类型验证

## 自定义数组验证

```js
const schema = array()
  .of(number())
  .test('sum-check', '数组总和必须大于10', (arr) => {
    return arr.reduce((sum, val) => sum + val, 0) > 10;
  });
```

* `test(name, message, fn)`：自定义验证逻辑
* `arr` 是当前数组值

## 小结

* `array().of(schema)` 定义数组元素类型
* 可以限制长度、使用嵌套对象、添加自定义规则
* 常用于表单中多选、列表、动态表格等场景
