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

JS实现对象数组按Category、TYPE分组生成指定嵌套对象

问题根源

原有代码的赋值逻辑存在两个问题:

  • 遍历到同分类项时,直接给分类键赋值全新的对象+当前属性,之前该分类下已经存入的所有键值对都会被整体覆盖,最终只会保留最后一次遍历到的属性
  • 硬编码判断Category == "Booking",无法自动适配Planning、SALES等其他分类
修复实现(jQuery 兼容原有写法)

核心逻辑:分类第一次出现时才初始化为空对象,后续同分类项只往已有对象里追加属性,不重新赋值整个对象。

var resultdata = {};
$.each(testdata, function (key, value) {
  // 当前分类不存在时,先初始化空对象,避免覆盖
  if (!resultdata[value.Category]) {
    resultdata[value.Category] = {};
  }
  // 往对应分类对象内追加键值对,不会影响已有属性
  resultdata[value.Category][value.TYPE] = value.Count;
});

执行后得到的resultdata结构和预期完全一致。

原生JS简洁实现(无需jQuery)

如果不需要依赖jQuery,可以用数组reduce方法实现,逻辑更精简:

const resultdata = testdata.reduce((acc, cur) => {
  acc[cur.Category] = acc[cur.Category] || {}; // 分类不存在才初始化空对象
  acc[cur.Category][cur.TYPE] = cur.Count;
  return acc;
}, {});

内容的提问来源于stack exchange,提问作者kanishka kumarasiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:18:14