Skip to content

treeMap 树形映射

对树形数组进行映射。

函数定义

typescript
function treeMap<
    T extends Record<keyof any, any>[],
    U extends (treeItem: TreeItem) => Record<keyof any, any>,
    TreeItem extends T extends (infer Item)[] ? Item : T,
>(
    tree: T,
    map: U,
    options?: Options
): ReturnType<U>[]
function treeMap<
    T extends Record<keyof any, any>,
    U extends (treeItem: TreeItem) => Record<keyof any, any>,
    TreeItem extends T extends (infer Item)[] ? Item : T
>(
    treeItem: T,
    map: U,
    options?: Options
): ReturnType<U>
function treeMap<
    T extends Record<keyof any, any> | Record<keyof any, any>[],
    U extends (treeItem: TreeItem) => Record<keyof any, any>,
    TreeItem extends T extends (infer Item)[] ? Item : T
>(
    treeOrTreeItem: T,
    map: U,
    options?: Options
): ReturnType<U>[] | ReturnType<U>

参数

treeOrTreeItem Record<keyof any, any> | Record<keyof any, any>[]

树节点或树

map (treeItem: Record<keyof any, any>) => Record<keyof any, any>

映射函数

options { childrenField?: string, targetChildrenField?: string } 可选

配置项,childrenField 为子节点字段,默认为 children,targetChildrenField 为映射后子节点字段,默认与 childrenField 相同

返回值

Record<keyof any, any> | Record<keyof any, any>[] 完成映射后的树形

例子

ts
import { treeMap } from '@oasis-end/utils'

const treeItemMap = treeMap({
    name: 'testName',
    children: [
        { name: 'testName1' },
        { name: 'testName2' },
        { name: 'testName3', children: [ { name: 'testName4' } ] }
    ]
} as TreeItem, treeItem => {
    return {
        nameMap: treeItem.name
    } as TreeItemMap
})
// 结果
// {
//     nameMap: 'testName',
//     children: [
//         { nameMap: 'testName1' },
//         { nameMap: 'testName2' },
//         { nameMap: 'testName3', children: [ { nameMap: 'testName4' } ] }
//     ]
// }

interface TreeItem {
    name: string,
    children?: TreeItem[]
}

interface TreeItemMap {
    nameMap: string,
    children?: TreeItem[]
}

Released under the MIT License.