1.对树形数据模糊搜索 转载 原创作者小丶侯
搜索结果
let arr = [
{
title: '你好吗?',
children: [
{
title: '很好啊',
children: null
},
{
title: '是吗',
children: null
}
]
},
{
title: '卡卡卡',
children: [
{
title: '非常好芬',
children: null
}
]
},
{
title: '第三方的',
children: null
}
];
const rebuildData=(value, arr) => {
let newarr = [];
arr.forEach(element => {
if (element.children && element.children.length) {
const ab = rebuildData(value,element.children);
const obj = {
...element,
children: ab
};
if (ab && ab.length) {
newarr.push(obj);
}
} else {
if (element.title.indexOf(value) > -1) {
newarr.push(element);
}
}
});
return newarr;
};
console.log(rebuildData( '好', arr));
2. 树结构找父级 里面使用了ts 如果不需要把直接把 :any 删除
// 树状数据查找直接父元素
export const findParentNode = (treeData: any, value: any, record: any) => {
let data = { ...record, children: treeData };
let result: any;
if (!data) {
return;
}
for (let i = 0; i < data.children.length; i++) {
let item = data.children[i];
if (item.value == value) {
result = data;
return result;
} else if (item.children && item.children.length > 0) {
result = findParentNode(item.children, value, item);
if (result) {
return result;
}
}
}
return result;
}
3. 线形数据转树形数据 转载 原创已经忘记在哪看见了抱歉
function fommat({
arrayList,
pidStr = 'menuParentId', //上树形结构上级key
idStr = 'menuId', // 当前key
childrenStr = 'children',
}) {
let listOjb = {}; // 用来储存{key: obj}格式的对象
let treeList = []; // 用来储存最终树形结构数据的数组
// 将数据变换成{key: obj}格式,方便下面处理数据
for (let i = 0; i < arrayList.length; i++) {
listOjb[arrayList[i][idStr]] = arrayList[i];
}
// 根据pid来将数据进行格式化
for (let j = 0; j < arrayList.length; j++) {
// 判断父级是否存在
let haveParent = listOjb[arrayList[j][pidStr]];
if (haveParent) {
// 如果有没有父级children字段,就创建一个children字段
!haveParent[childrenStr] && (haveParent[childrenStr] = []);
// 在父级里插入子项
haveParent[childrenStr].push(arrayList[j]);
} else {
// 如果没有父级直接插入到最外层
treeList.push(arrayList[j]);
}
}
return treeList;
}