如何编写JS的organizeItems函数按category分类处理item对象数组
现有代码问题排查
- 属性名拼写错误:入参item对象的名称属性是
itemName,你的代码写为itemNames(多了末尾的s),取值为undefined,这是结果数组中出现undefined的直接原因。 - 多余的遍历逻辑:不需要通过
for...in遍历item的所有属性,item的三个属性都是固定字段,直接取值即可。 - 分类数组覆盖问题:你每次执行
codeObj[itemData[i].category] = 新数组会直接覆盖同分类之前的内容,正确逻辑应该是:如果该分类在结果对象中不存在,先初始化为空数组,再往数组中push新的元素。 - 缺少促销后缀处理逻辑:没有判断
onSale字段的值,来给对应的商品名称加($)后缀。 - 语法不完整:现有代码的for循环、for...in循环都没有闭合的大括号,运行会直接报语法错误。
正确实现代码
function organizeItems(items) { const result = {}; // 遍历所有商品条目 for (let i = 0; i < items.length; i++) { const currentItem = items[i]; const category = currentItem.category; // 处理商品名称,促销商品加后缀 let showName = currentItem.itemName; if (currentItem.onSale) { showName += '($)'; } // 分类不存在则初始化空数组 if (!result[category]) { result[category] = []; } // 把处理好的名称加入对应分类数组 result[category].push(showName); } return result; }
测试验证
var itemData = [ { category: 'fruit', itemName: 'apple', onSale: false }, { category: 'canned', itemName: 'beans', onSale: false }, { category: 'canned', itemName: 'corn', onSale: true }, { category: 'frozen', itemName: 'pizza', onSale: false }, { category: 'fruit', itemName: 'melon', onSale: true }, { category: 'canned', itemName: 'soup', onSale: false }, ]; console.log(organizeItems(itemData)); // 输出结果和要求完全匹配
内容的提问来源于stack exchange,提问作者Conota Beasley
相关产品推荐
相关产品推荐

