使用递归解析JavaScript嵌套对象数组:品牌与父品牌输出问题
问题:遍历品牌层级并输出父品牌关系
需要遍历给定的inventory数组,输出所有品牌名称及其父品牌名称,其中顶级品牌的父品牌为"None",示例输出格式为:None : Parle, Parle : Parle Agro, Parle Agro : Frooti。
let inventory = [ { brand: 'Parle', products: [ { brand: 'Parle Agro', products: [ { brand: 'Frooti', products: [] }, { brand: 'Bailey', products: [] } ] } ] }, { brand: 'Pepsico', products: [ { brand: 'VB', products: [ { brand: 'Lays', products: [] }, { brand: 'Kurkure', products: [ { brand: 'Mad Angles', products: [] } ] } ] }, { brand: 'Pepsi', products: [] } ] }, { brand: 'Cadbury', products: [] } ];
我尝试了以下递归方法,但未能实现预期效果,请求帮助修正:
function brandName(obj){ for (var key in obj) { var item = obj[key]; if (typeof item === "object"){ brandName(item.products); } } } brandName(inventory);
解决方案
你的递归逻辑没有正确跟踪父品牌信息,也没有收集目标结果。可以通过在递归时传递父品牌参数,并维护结果数组来实现需求:
function getBrandRelations(items, parentBrand = "None", result = []) { items.forEach(item => { // 记录当前父品牌与品牌的对应关系 result.push(`${parentBrand} : ${item.brand}`); // 递归处理子品牌,父品牌更新为当前品牌 if (item.products.length > 0) { getBrandRelations(item.products, item.brand, result); } }); return result; } // 调用函数并输出格式化后的结果 const brandRelations = getBrandRelations(inventory); console.log(brandRelations.join(', '));
代码说明
- 函数接收三个参数:待处理的品牌数组
items、当前层级的父品牌parentBrand(默认值"None"对应顶级品牌)、用于存储结果的数组result。 - 遍历每个品牌项,将父品牌与当前品牌的对应关系存入结果数组。
- 若当前品牌存在子产品,递归调用函数,将父品牌设为当前品牌,继续处理子层级。
- 最后通过
join(', ')将结果数组拼接成要求的字符串格式输出。
输出结果
None : Parle, None : Pepsico, None : Cadbury, Parle : Parle Agro, Parle Agro : Frooti, Parle Agro : Bailey, Pepsico : VB, Pepsico : Pepsi, VB : Lays, VB : Kurkure, Kurkure : Mad Angles
内容的提问来源于stack exchange,提问作者Priyanka
相关产品推荐
相关产品推荐

