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

如何在JavaScript中实现按type动态分组数据?

动态按type分组数据的优化方案

你当前的分组方式需要预先声明固定数组,扩展性不足,以下是两种更优的动态分组实现方法:

方法一:使用Array.prototype.reduce(推荐)

reduce是处理数组分组最简洁的方式,无需预先定义分组容器,自动根据type创建对应分组:

const arr = [
  {"id":1,"type":"tv","name":"name1"},
  {"id":2,"type":"movie","name":"name2"},
  {"id":3,"type":"person","name":"name3"},
  {"id":4,"type":"tv","name":"name4"}
];

const groupedData = arr.reduce((result, item) => {
  // 若当前type的分组不存在,先初始化空数组
  if (!result[item.type]) {
    result[item.type] = [];
  }
  // 将当前元素推入对应分组
  result[item.type].push(item);
  return result;
}, {});

// 输出结果:{ tv: [...], movie: [...], person: [...] }
console.log(groupedData);

方法二:使用forEach配合对象

如果觉得reduce不够直观,也可以用forEach遍历数组,手动维护分组对象:

const arr = [
  {"id":1,"type":"tv","name":"name1"},
  {"id":2,"type":"movie","name":"name2"},
  {"id":3,"type":"person","name":"name3"},
  {"id":4,"type":"tv","name":"name4"}
];

const groupedData = {};
arr.forEach(item => {
  // 初始化分组数组(如果不存在)
  if (!groupedData[item.type]) {
    groupedData[item.type] = [];
  }
  groupedData[item.type].push(item);
});

console.log(groupedData);

优势说明

  • 完全动态:新增任何type类型的数据,无需修改代码,自动生成对应分组
  • 代码简洁:相比switch+预声明数组的方式,行数更少,逻辑更清晰
  • 扩展性强:后续调整分组规则只需修改核心逻辑,无需改动容器定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:10:24