You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:15:05