1、获取树当前节点下的所有子树key值
/**
* 获取树当前节点下的所有子树key值
* @param {*} source 树节点
* @param {*} children
* @returns
*/
export function findChildIdList(source, children = 'children') {
const childId = [];
childId.push(source.key);
//查找字树的id
function findChildId(data) {
data?.forEach(child => {
childId.push(child.key);
if (child[children] && child[children].length) {
findChildId(child[children])
}
})
}
if (source[children] && source[children].length) {
findChildId(source[children]);
}
return childId;
}
2、根据节点key值获取当前节点对象
/**
* 根据节点key值获取当前节点对象
* @param {*} source
* @param {*} key
* @param {*} children
* @returns
*/
export function findItemObj(source, key, children = 'children') {
function toFindItem(data) {
if (!data || !data.length) {
return;
}
for (var i = 0; i < data.length; i++) {
let item = data[i];
if (item.key == key) {
return item;
} else {
toFindItem(item[children], data.key, 0);
}
}
}
return toFindItem(source);
}
3、根据当前节点获取该节点的所有父节点及祖父节点
/**
* 根据当前节点获取该节点的所有父节点及祖父节点
* @param {*} source 树数据
* @param {*} key
* @param {*} children
* @param {*} level
* @returns
*/
export function findParentIdList(source, key, children = 'children', level = 0) {
var arrRes = [];
let rootObj = {
key: -1,
[children]: source
}
function toFindId(data, key, level) {
if (!data || !data[children] || !data[children].length) {
return;
}
for (var i = 0; i < data[children].length; i++) {
let item = data[children][i];
if (item.key == key) {
// 将匹配到的结果保存到数组
arrRes.unshift(item);
// 递归它的父级
toFindId(rootObj, data.key, 0);
break;
} else if (item[children] && item[children].length > 0) {
//如果有子集,则把子集作为参数重新执行本方法
toFindId(item, key, level + 1);
}
}
};
toFindId(rootObj, key, level);
return arrRes;
}
4、根据选中的节点列表,获取选中节点的父节点及祖父节点key值
/**
* 根据选中的节点列表,获取选中节点的父节点及祖父节点key值
* @param {*} source 原数据
* @param {*} checkedKeys 数组 选中的key组合
*/
export function findAllParentIdList(source, checkedKeys) {
const paraentKey = [];
checkedKeys.forEach(key => {
const parentId = findParentIdList(source, key);
// console.log('------parentId--------', parentId);
parentId.forEach(pItem => {
if (!paraentKey.includes(pItem.key)) {
paraentKey.push(pItem.key);
}
})
})
return paraentKey;
}
5、将多维数组转换为一维数组
/**
* 多为数组转换为一维数组
* @param {*} data []
* @returns []
*/
export function quotaParams(data) {
var newArr = [];
function toQuotaArray(arr) {
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
toQuotaArray(arr[i])
} else {
newArr.push(arr[i])
}
}
}
toQuotaArray(data);