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

如何在JavaScript中按作物类型统计总面积并关联名称

如何在JavaScript中根据作物ID关联数组并汇总总面积?

需求说明

需要将paddocks数组按paddockTypeId分组汇总总面积,再关联paddockType数组中的作物名称,最终得到包含作物名称和对应总面积的数组。

实现步骤与代码

步骤1:建立作物ID与名称的映射表

先把paddockType转换成以ID为键、名称为值的Map,这样可以快速通过ID查找作物名称,避免重复遍历数组(类似Java中的HashMap):

const typeMap = new Map();
paddockType.forEach(type => {
  typeMap.set(type.id, type.name);
});

步骤2:汇总每个作物ID的总面积

遍历paddocks数组,用Map记录每个作物ID的累计面积:

const areaSumMap = new Map();
paddocks.forEach(paddock => {
  const cropId = paddock.paddockTypeId;
  const currentArea = paddock.area;
  
  // 若已存在该ID则累加面积,否则初始化
  areaSumMap.set(cropId, (areaSumMap.get(cropId) || 0) + currentArea);
});

步骤3:转换为目标格式数组

将汇总好的面积Map,结合作物名称映射表,转换成最终需要的数组结构:

const finalResult = Array.from(areaSumMap.entries()).map(([id, totalArea]) => {
  return {
    name: typeMap.get(id),
    totalArea: totalArea
  };
});

// 输出结果
console.log(finalResult);

简洁版代码(合并步骤)

如果熟悉JavaScript数组方法,可以用reduce简化汇总逻辑,把三步合并为:

// 建立ID-名称映射
const typeMap = new Map(paddockType.map(type => [type.id, type.name]));

// 汇总面积并转换格式
const finalResult = Array.from(
  paddocks.reduce((sumMap, paddock) => {
    const id = paddock.paddockTypeId;
    sumMap.set(id, (sumMap.get(id) || 0) + paddock.area);
    return sumMap;
  }, new Map())
).map(([id, total]) => ({ name: typeMap.get(id), totalArea: total }));

console.log(finalResult);

结果示例

最终输出的数组结构如下(数值为实际汇总结果):

[
  { name: 'PALTOS', totalArea: 56259 },
  { name: 'NOGALES', totalArea: 2151 },
  { name: 'AVELLANOS', totalArea: 87008 },
  { name: 'CEREZAS', totalArea: 38073 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:40:33