---
title: "forEach"
description: "遍历树中的每一个节点，并执行 `visitor` 函数。`visitor` 函数可以返回 `false` 来提前终止整个遍历。"
seo_title: "forEach"
seo_description: "Traverse a tree and run a visitor callback on every node, an easy way to collect, log, or mutate nodes across all depths."
canonical_url: "https://core.mhaibaraai.cn/docs/transformers/tree/for-each"
---
# forEach

> 遍历树中的每一个节点，并执行 \`visitor\` 函数。\`visitor\` 函数可以返回 \`false\` 来提前终止整个遍历。

## 用法

`forEach` 方法以深度优先的顺序遍历树中的每一个节点，并对每个节点执行 `visitor` 函数。

```ts [example.ts]
import { Tree } from '@movk/core'

const tree = [{ id: 1, name: 'A', children: [{ id: 2, name: 'B' }] }]

const names: string[] = []
Tree.forEach(tree, ({ node }) => {
  names.push(node.name)
})

// names => ['A', 'B']

// 提前终止
Tree.forEach(tree, ({ node }) => {
  if (node.name === 'A') {
    return false // 停止遍历
  }
})
```

## API

`forEach<T extends TreeNode>(tree: T[], visitor: (context: VisitorContext<T>) => void | false, config?: TreeConfig): void`

### 参数

**tree** (`T[]`) *required*: 源树形结构数组。

**predicate** (`(context: VisitorContext<T>) => boolean`) *required*: 一个谓词函数，对树中的每个节点调用。如果函数返回 true，该节点及其所有父节点将被保留在结果中。
该函数接收一个包含以下属性的 context 对象：当前正在处理的节点。节点的深度（根节点为 0）。从根节点到当前节点的路径数组（包含当前节点）。当前节点在其同级节点中的索引。

**config** (`TreeConfig`): 用于自定义树形结构中 id, pid, children 键名的配置对象。可选。指定节点唯一标识符的键名。默认为 "id"。可选。指定节点父级标识符的键名。默认为 "pid"。可选。指定子节点数组的键名。默认为 "children"。

## Changelog

See commit history for [src/transformers/tree/traverse.ts](https://github.com/mhaibaraai/movk-core/commits/main/src/transformers/tree/traverse.ts).


## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
