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

JavaScript中按作物类型汇总面积并排序生成名称数组

解决方案

先假设你的两个数组结构如下(如果和实际结构有出入,调整对应属性名即可):

// typeCrop 示例:每个对象包含作物ID和名称
const typeCrop = [
  { id: 1, cropName: 'apple' },
  { id: 2, cropName: 'berry' },
  { id: 3, cropName: 'orange' },
  { id: 4, cropName: 'pineapple' }
];

// lands 示例:每个对象包含地块类型ID和面积
const lands = [
  { landTypeID: 1, area: 60 },
  { landTypeID: 1, area: 40 },
  { landTypeID: 2, area: 80 },
  { landTypeID: 3, area: 70 },
  { landTypeID: 4, area: 50 }
];

实现步骤:

  1. 汇总面积:用reduce遍历lands数组,按landTypeID累加面积
const areaSummary = lands.reduce((acc, land) => {
  const id = land.landTypeID;
  // 已存在的ID累加面积,不存在则初始化为当前面积
  acc[id] = (acc[id] || 0) + land.area;
  return acc;
}, {});
// 此时areaSummary为:{1: 100, 2: 80, 3:70, 4:50}
  1. 按面积降序排序:把汇总对象转成包含ID和面积的数组,再排序
const sortedEntries = Object.entries(areaSummary)
  .map(([id, area]) => ({ id: Number(id), area })) // 将字符串ID转为数字(匹配typeCrop的ID类型)
  .sort((a, b) => b.area - a.area);
// 此时sortedEntries为:[{id:1, area:100}, {id:2, area:80}, ...]
  1. 匹配作物名称生成结果数组:遍历排序后的数组,从typeCrop中提取对应名称
// 把typeCrop转成Map,提升大数组的查找效率
const cropMap = new Map(typeCrop.map(crop => [crop.id, crop.cropName]));

const result = sortedEntries.map(item => cropMap.get(item.id));
// 最终result就是:['apple','berry','orange','pineapple']

完整整合代码:

const typeCrop = [
  { id: 1, cropName: 'apple' },
  { id: 2, cropName: 'berry' },
  { id: 3, cropName: 'orange' },
  { id: 4, cropName: 'pineapple' }
];

const lands = [
  { landTypeID: 1, area: 60 },
  { landTypeID: 1, area: 40 },
  { landTypeID: 2, area: 80 },
  { landTypeID: 3, area: 70 },
  { landTypeID: 4, area: 50 }
];

// 汇总面积
const areaSummary = lands.reduce((acc, land) => {
  const id = land.landTypeID;
  acc[id] = (acc[id] || 0) + land.area;
  return acc;
}, {});

// 排序
const sortedEntries = Object.entries(areaSummary)
  .map(([id, area]) => ({ id: Number(id), area }))
  .sort((a, b) => b.area - a.area);

// 匹配名称
const cropMap = new Map(typeCrop.map(crop => [crop.id, crop.cropName]));
const result = sortedEntries.map(item => cropMap.get(item.id));

console.log(result); // 输出:['apple','berry','orange','pineapple']

如果你的数组属性名和示例不同(比如typeCrop里的名称是name而非cropName,lands里的面积是size),修改对应属性名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:50:33