如何在嵌套数组中根据指定key-value获取其所属的完整对象
解决方案
原有代码的逻辑是遍历到匹配的键值对时,仅输出当前键和对应值,没有捕获该键值对所属的完整父对象,调整递归逻辑即可实现需求。
改造后的代码
function findMatchedObjects(target, prop, val, result = []) { // 过滤非对象类型的边界情况 if (typeof target !== 'object' || target === null) return result; // 检查当前遍历的对象是否包含目标键值对 if (target.hasOwnProperty(prop) && target[prop] === val) { result.push(target); // 如果不需要查找嵌套在匹配对象内部的其他匹配项,可在此处加return result提前结束当前分支的遍历 } // 递归遍历当前对象的所有子元素 Object.values(target).forEach(child => { findMatchedObjects(child, prop, val, result); }); return result; }
使用示例
用你提供的JSON结构测试:
const testData = [ { "page":"main", "content":[ { "type":"item", "item":[ { "name":"HAMMER", "price":"1000" }, { "name":"SWORD", "price":"2000" } ] } ] } ]; // 查找包含name: HAMMER的对象 const matchedList = findMatchedObjects(testData, 'name', 'HAMMER'); console.log(matchedList);
输出结果
[ { "name": "HAMMER", "price": "1000" } ]
这个方案会把所有匹配的对象收集到数组中返回,支持多层嵌套结构的查找,如果你只需要直接打印结果,也可以在result.push(target)的位置直接打印target即可。
内容的提问来源于stack exchange,提问作者Dexter
相关产品推荐
相关产品推荐

