JS循环处理JSON嵌套对象数组,拼接itemName生成allItems字段
问题分析
- 原代码第一处错误:循环赋值时直接将
items数组整体赋值给了allItems字段,没有提取数组元素的itemName属性,也没有拼接为字符串。 - 原代码第二处错误:后续的
map+join操作直接将存储对象的copyItems变量重写为了字符串,丢失了原有的对象结构。
正确实现方案
核心逻辑是对每个外层对象的items数组先提取所有itemName属性,再用, 拼接为字符串。由于空数组调用join方法会直接返回空字符串,无需额外判断items是否为空,逻辑可自动兼容空数组场景。
方案1:用Array.map实现(更简洁,不修改原数组)
const processedItems = items.map(item => { const allItems = item.items.map(subItem => subItem.itemName).join(', '); // 解构原对象,新增allItems字段,返回新对象,不会修改原items数组 return { ...item, allItems } }); console.log(processedItems);
方案2:基于原for循环逻辑修改(会修改原数组)
var copyItems = []; for (let i = 0; i < items.length; i++) { const allItemsStr = items[i].items.map(sub => sub.itemName).join(', '); items[i].allItems = allItemsStr; copyItems.push(items[i]); } console.log(copyItems);
两种方案的输出结果都和你提供的预期结构完全一致。
内容的提问来源于stack exchange,提问作者JS_basic_knowledge
相关产品推荐
相关产品推荐

