在含子数组的数组中查找ActionFull匹配指定值的唯一对象
解决从嵌套数组中查找指定ActionFull属性的唯一对象问题
嘿,我来帮你搞定这个需求!你要从bigArray里找出那个唯一的、ActionFull属性等于目标路径(比如'/budget/allocation'或者'/budget')的对象,而且数组里每个元素都带有FunctionalityChildren子数组,对吧?这里给你两种实用的解法,按需选就行:
方法一:扁平化数组后查找(适用于单层嵌套)
如果你的FunctionalityChildren只有一层嵌套(也就是子数组里的元素不再有自己的FunctionalityChildren),可以先把所有可能的对象合并成一个数组,再精准匹配:
// 先定义你要找的目标路径 const targetPath = '/budget/allocation'; // 把bigArray本身的元素和所有子数组的元素合并成一个大数组 const allCandidateItems = [ ...bigArray, ...bigArray.flatMap(item => item.FunctionalityChildren || []) ]; // 查找唯一匹配的对象 const matchedItem = allCandidateItems.find(item => item.ActionFull === targetPath);
小提示:如果确定目标对象只会出现在FunctionalityChildren里,直接去掉...bigArray这部分就行;flatMap会自动跳过那些没有FunctionalityChildren或者属性值为null/undefined的元素,避免报错。
方法二:递归遍历(适用于多层嵌套)
如果FunctionalityChildren里的元素还可能嵌套自己的FunctionalityChildren(也就是多层嵌套结构),那用递归查找就更稳妥,能覆盖所有层级:
// 定义目标路径 const targetPath = '/budget'; // 递归查找函数 function findMatchedItem(arr, target) { for (const item of arr) { // 先检查当前元素是否匹配目标 if (item.ActionFull === target) { return item; } // 如果当前元素有子数组,递归进去查找 if (item.FunctionalityChildren && Array.isArray(item.FunctionalityChildren)) { const foundItem = findMatchedItem(item.FunctionalityChildren, target); if (foundItem) return foundItem; } } // 遍历完都没找到就返回null return null; } // 调用函数获取结果 const matchedItem = findMatchedItem(bigArray, targetPath);
补充说明:因为你明确要找唯一的对象,所以这两种方法都是找到匹配项就立刻停止遍历,既保证性能,也符合“唯一”的前提。如果实际场景中可能存在多个匹配,你可以把find改成filter,或者在递归里收集所有匹配项,不过按照你的需求,当前写法就足够啦~
内容的提问来源于stack exchange,提问作者felipe muner
相关产品推荐
相关产品推荐

