1.一维数组转换成树形结构
数组示例:
var data =
[
{ pId: 0, id: 1, value: "1" },
{ pId: 0, id: 3, value: "2" },
{ pId: 3, id: 7, value: "3" },
{ pId:7, id: 10, value: "4" }
]
一、递归解法,不推荐使用(数组大的时候容易爆栈) 可以深度遍历,也可以广度遍历
二、利用引用类型,循环一遍就组装好tree
function setNode(idsMap, id){
let node
if(!idsMap[id]){
idsMap[id] = node = {id: id, children: []}
}else{
node = idsMap[id]
}
return node
}
function convertArrayToTree(arr){
const idsMap = {},results = []
data.forEach(item=>{
let node, parentNode
node = setNode(idsMap, item.id)
if(item.pId === 0){
//如果是一级节点,就push到results数组中
results.push(node)
}else{
//在idsMap中寻找当前节点的parent节点,找到后把当前节点push到children中
//因为是引用地址关系,这样就形成了一个树状的引用关系,当一次循环遍历结束后,这个树状结构就已经生成了
parenNode = setNode(idsMap, item.pId)
parenNode.children?.push(node)
}
})
return results
}
console.log(convertArrayToTree(data))
2.根据文件内容生成hash串
3.搜索最优匹配排序
例如:
选项有['dddddtest', 'atest', 'cctest', 'test'], 搜索test,应出现
[ 'test','atest', 'cctest', 'dddddtest']
const List
.filter(item => {
return item.toLocaleLowerCase().includes(searchVal)
})
.map(i => [
i.toLocaleLowerCase().indexOf(searchVal),
i
])
.sort(([a], [b]) => a - b)
.map(([, i]) => i)
4.树的查找