const id = 88 const arr = [ { text: '第一层', id: 1, children: [ { text: '第二层', id: 2, children: [ { text: '第三层', id: 88 } ] } ] }, { text: '第一层', id: 3, children: [ { text: '第二层', id: 4, children: [ { text: '第三层', id: 5 } ] } ] } ] function getIds(id) // ['1,2,88']
要求写一个方法,匹配上id后,联同祖类所有的id都获取到放到数组返回
function getIds(arr, target) { let res = [] const state = [] function traverse (state, arr) { for(let i = 0; i < arr.length; i++) { const item = arr[i] if (item.id === target) { res = [...state, item.id] break; } state.push(item.id) traverse(state, item.children || []) state.pop() } } traverse(state, arr) return res}console.log(getIds(arr, 88))// [1,2,88]
getIds(id, array) { let idList = [] let targetItem = array.filter(item => JSON.stringify(item).indexOf(`"id":${id}`) != -1) function getIdList(itemArray) { itemArray.forEach(item => { if (item.id === id) { return idList.push(item.id) } else { idList.push(item.id) if (item.children && item.children.length > 0) { getIdList(item.children) } } }) } getIdList(targetItem) return idList }
使用:getIds(88,arr)
需要封装一个递归函数(已去除undefined):
function findPathById(tree, targetId) { let path = []; function traverse(node, currentPath) { if (node.id === targetId) { path = [...currentPath, node.id]; return true; // 当找到目标 ID 时返回 true } if (node.children) { for (let child of node.children) { if (traverse(child, [...currentPath, node.id])) { return true; // 如果在子节点中找到目标 ID,则返回 true } } } return false; } for (let node of tree) { if (traverse(node, [])) { break; // 当找到目标 ID 时停止遍历 } } return path;}
传入数组和要查找的id值,如下:
findPathById(arr,88)
你可以使用递归函数来解决这个问题。首先,你需要定义一个空数组来存储所有的ID。然后,你可以在每一层查找特定的ID,如果找到,就把这个ID和它的所有祖先的ID添加到数组中。最后,返回这个数组。
以下是实现这个方法的JavaScript代码:
const id = 888;const arr = [...];function getIds(id, array = []) { // 检查当前id是否存在 if (array.some(a => a === id)) { // 如果已经存在,直接返回 return array; } // 将当前id添加到结果数组中 array.push(id); // 递归检查所有祖先id if (id > 1) { getIds(Math.floor(id / 10), array); } return array;}// 调用函数并打印结果console.log(getIds(88)); // ['88', '2', '1']console.log(getIds(5)); // ['5', '4', '3']
这个函数首先检查给定的ID是否已经存在于结果数组中。如果存在,那么就没有必要再次添加。然后,它将当前ID添加到结果数组中。最后,它对每个祖先ID递归调用自己,将它们添加到结果数组中。注意,我们这里假定了你的ID是从1开始的,并且每个ID是它的祖先ID的10倍。如果你的ID生成规则不同,你可能需要修改这个递归调用。
上面的代码将给定的ID和它的所有祖先的ID放在同一个数组中,并按它们在层次结构中的顺序排列。这意味着第一代祖先的ID将出现在数组的开头,而第三代祖先的ID将出现在数组的末尾。
匹配 字符串类似'type=""action=""id=""' 需要匹配多个action=""中间的内容。
本文向大家介绍写一个方法把多维数组降维相关面试题,主要包含被问及写一个方法把多维数组降维时的应答技巧和注意事项,需要的朋友参考一下
,该数组是一维数组,第一层节点是parent:# 第二层根据第一层id和 第二层parent进行比较,以此类推
我对这个代码有一些问题 问题1:终止情况究竟如何运作?s.length如何等于0? 问题2:为什么代码需要具有“firstChar”才能反转字符串?为什么当逆转字符串接受0的子字符串而不必添加第一个字符时,代码不起作用?
必须包括,字母,数字,下划线,长度20个字符以内
.net6下使用了SignalR的websocket,postman是可以正常连接的,但是前端连接就报错 前端代码: