/**
*
* @param {Object}
* @param {Array} arr 数组对象
* @param {String} childrenKey 子数组的key
* @param {Number=} expandLevel 可选 展开的层级
* @param {String=} levelKey 可选 树形结构中元素的层级字段 层级从0开始 当expandLevel有值时 levelKey为必须
* @param {Boolean=} noParents 返回展开数组时不包含根节点 当root为true时 level为必须 否则默认为1
* @example expandArrayObject({ arr, childrenKey[, level, root] })
* @description 递归展开数组对象 默认展开时包含父节点
*/
export function expandArrayObject({
arr,
childrenKey,
expandLevel,
levelKey,
noParents
}) {
const list = []
let currentLevel = 1
const _level = expandLevel || (noParents && 1)
let parentCode = null
const recursiveExpand = (arr, pCode) => {
parentCode = pCode
if (_level && currentLevel > _level) {
return
}
Array.isArray(arr) &&
arr.forEach((item) => {
currentLevel = item[levelKey] + 1
if (noParents && currentLevel < _level) {
recursiveExpand(item[childrenKey])
} else {
list.push(item)
recursiveExpand(item[childrenKey])
}
})
}
recursiveExpand(arr, parentCode)
return list
}
/**
*
* @param {Object}
* @param arr 查找数据的元数组
* @param childrenKey 子数组的key
* @param codeKey 主键key
* @param code 需要找到的元素的主键值
* @description 根据主键递归查找树形数据中对应的数据
*/
export function getChildrenRecursive({ arr, childrenKey, codeKey, code }) {
let result
arr.forEach((item) => {
if (item[codeKey] === code) {
result = item
} else {
getChildrenRecursive({
arr: item[childrenKey],
childrenKey,
codeKey,
code
})
}
})
return result
}
递归展开数组对象,根据主键递归查找树形数据中对应的数据
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- vue官方文档给出,递归组件介绍 但是如何使用,以及实际应用的案例网上很少出现,今天介绍一下工作中遇到的问题,以及...
- 一个朋友问我应该怎么从一个树的 JSON 数组生成 HTML,使用 和 来构建页面元素。于是我简单的画了个...
- 5月以来,哪怕对市场风向再不敏感的人,也感觉到阵阵凉意。二级市场连续下挫,一级市场融资环境恶化,不论企业融资数量还...