---
group:
   title: 工具类
title: 2.树数据相关取值 
---
# 树数据相关取值

## 递归查看父级节点数据集合及当前节点数据

```js
/**
 * @description  递归查看父级节点数据集合及当前节点数据
 * @params {Array}  list 当前需要过滤查看的数据集合、
 * @params {String/Array} nodeKey 当前用于查找匹配数据的标识值
 * @params {Object} params 指定当前数据中，筛选对应子集合字段名及匹配标识值字段名
 *                         （childrenParam：指当前子集合数据字段名（字符串表示单个，数组表示当前多个子集合字段名），keyParam： 指当前匹配标识值字段名）
 * @params {Object} extra
 *
 * @result {Array} nodeParent  当前传入nodeKey值所有上级别父级数据对象数组集合（倒序排列，根节点在最后一条）
 * @result {Array} parentKeys  当前传入nodeKey值所有上级别父级数据关键字数据集合(keyParam)（倒序排列，根节点在最后一条）
 * @result {Array} matchNode   当前传入nodeKey值所在的数据对象集合
 *
 * 用法：
 * getParentNodes(treeList, matchId, { childrenParam: 'subDeviceType', keyParam: 'id'})
 * */

import { getParentNodes } from 'fan-standard-comp';

```

<code title="getParentNodes()用法"  src="../../src/utils/demos/index.tsx" ></code>

## 递归查找树指定节点的所有子节点及id
注：如果只传树，则将返回所有节点及id

```js

/**
 * @description  递归查找指定节点的所有子菜单与子功能集合
 * @params {Array}  childNode 当前需要过滤查看的子数据集合、
 * @params {Object} params 指定当前数据中，筛选对应子集合字段名及匹配标识值字段名
 *                         （childrenParam：指当前子集合数据字段名（字符串表示单个，数组表示当前多个子集合字段名），keyParam： 指当前匹配标识值字段名）
 * @params {Object} extra
 *
 * @result {Array} childKeys  所有子项的id
 * @result {Array} nodeChildren   当前传入nodeKey值所在的数据对象集合
 * */

import { getChildrenNodes } from 'fan-standard-comp';

```

<code title="getChildrenNodes()用法演示"  src="../../src/utils/demos/childNodes.tsx" ></code>


## 递归查找树指定节点或节点集合的完整路径数据
```js

/**
 * @description  查找指定节点或节点集合的完整路径数据
 * @params {Array}  list 查询的数据源
 * @params {Array | String | Number}  nodeKey 需要查询的key集合
 * @params {Object} params 指定当前数据中，筛选对应子集合字段名及匹配标识值字段名
 *                         （childrenParam：指当前子集合数据字段名（字符串表示单个，数组表示当前多个子集合字段名），keyParam： 指当前匹配标识值字段名）
 *
 * @result {Array} 所有匹配到的层级数据(如果nodeKey是数组，则返回的节点集合会分别按顺序存到数组内
 *
 * */

import { getNodePaths } from 'fan-standard-comp';
```

<code title="getNodePaths()用法演示"  src="../../src/utils/demos/getNodePaths.tsx" ></code>



## 查找当前节点数据
```js

/**
 * @description  查找节点数据：点击获取对应ID的完整数据（即从树数据中深层查找与ID值相匹配的相关数据对象）
 *
 * @param [array] list 需要过滤的数据
 * @param [string] key 指定过滤的key值
 * @param [Object] optionName 指定value与children相关字段名
 *
 * @data list:<array:[{ value: '', label: '', children: []}]> 列表数据格式
 */

import { getNode } from 'fan-standard-comp';
```

<code title="getNode()用法演示"  src="../../src/utils/demos/getNode.tsx" ></code>

## 数组转树形结构

```js
/**
* 数组转树形结构
* @param {array} list 被转换的数组
* @param {number|string} root 根节点（最外层节点）的 id
* @param {object} params 字段值（默认 { keyParam: 'id', parentParam: 'parentId' }）
* @return array
*/

import { arrayToTree } from 'fan-standard-comp';
```



## 多根树转换成数组

```js
/**
* 多根树转换成数组
* @param {array} tree 被转换的树（仅限于只有一个根的树
* @return array
*/
  
import { convertToArray } from 'fan-standard-comp';
```



## 过滤指定名称或其他字段值
```js

/**
* 树过滤（默认按名称过滤，也可按指定的字段名过滤）
* @param {array} list 需要过滤的树
* @param {string | number} nodeKey 需要筛选的名称（默认搜索名称，如果需要指定其他字段值，则参数传object
* @param {object} params 指定当前数据中，筛选对应子集合字段名及匹配标识值字段名
*         childrenParam：指当前子集合数据字段名（字符串表示单个，数组表示当前多个子集合字段名），keyParam： 指当前匹配标识值字段名）
*
* @return array  返回新的数组
* */


import { filterTreeNodes } from 'fan-standard-comp';

```


## 全选择"树"的所有节点，但是不包括禁用的节点

```
/**
* 全选树节点，排除禁用节点
* @param {Array} treeData 树数据组
* @param {Object} optionName 指定节点字段
* @param {Boolean} updateSource 是否同步更改数据源，始数组内会加入 checked:true字段
*
* @return {Number} selectedCount  可全选的数量
* @return {Array} selectedNodes   可全选的节点集合
* @return {Number } totalCount    全部节点数量
* @return {Array } treeData       更改后的数量组
*
* @example selectAllExcludingDisabled([],{ children: 'children', disabled: 'disabled' }, false)
* */

import { selectAllExcludingDisabled } from 'fan-standard-comp';

```
