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

遍历JSON对象时按state字段分组有没有更优的实现方法?

优化实现方案

可以用ES2022原生提供的Object.groupBy方法直接完成分组,再配合排序逻辑,整体代码会精简很多:

// 直接按state分组原始数据
const groupedCities = Object.groupBy(jsonobj.data, item => item.state);

// 排序+遍历输出
Object.entries(groupedCities).forEach(([state, cityList]) => {
  console.log(state);
  cityList.map(i => i.city).sort().forEach(city => console.log(city));
});

如果需要兼容不支持Object.groupBy的运行环境,也可以简化reduce的写法,省去原实现中多余的浅拷贝、单独map和全量排序步骤:

const groupedCities = jsonobj.data.reduce((acc, { city, state }) => {
  (acc[state] ??= []).push(city);
  return acc;
}, {});

Object.entries(groupedCities).forEach(([state, cities]) => {
  console.log(state);
  cities.sort().forEach(city => console.log(city));
});

相比原实现的优势:

  • 减少了不必要的全量数组遍历次数,数据量大时性能更好
  • 分组后再针对每个州的城市列表排序,比全量预排序的效率更高
  • 用Object.entries+forEach替代两层for-in循环,避免了for-in意外遍历原型属性的潜在问题
  • 用空值合并赋值运算符??=简化了分组数组的初始化逻辑,代码更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:54:04