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

如何对数组对象的字段值做比例计算并重组结构?

解决方案

核心思路

先提取目标字段(carry、distance)的最大值,再遍历原数组,按「(当前值/最大值)*100」的公式计算百分比评分,最后将评分字段追加到原对象中。

完整代码实现

const data = [
  { id: 1, direction: "A", carry: 6, distance: 1.41 },
  { id: 2, direction: "B", carry: 5, distance: 2.83 },
  { id: 3, direction: "C", carry: 4, distance: 4.24 },
  { id: 4, direction: "D", carry: 3, distance: 5.66 },
];

// 1. 提取目标字段的最大值
const maxCarry = Math.max(...data.map(item => item.carry));
const maxDistance = Math.max(...data.map(item => item.distance));

// 2. 遍历数组,计算评分并生成新数据
const result = data.map(item => ({
  ...item,
  carry_rating: Math.round((item.carry / maxCarry) * 100),
  distance_rating: Math.round((item.distance / maxDistance) * 100)
}));

console.log(result);

代码说明

  1. 提取最大值:

    • 使用data.map(item => item.carry)提取所有carry值,通过扩展运算符...传入Math.max得到最大值,distance字段同理。
    • 这一步比sort更高效,sort需要排序整个数组,而直接提取最大值只需一次遍历。
  2. 生成新数组:

    • 使用map遍历原数组,通过对象扩展运算符...item保留原字段。
    • 用Math.round对百分比结果取整,和示例中的数值匹配(比如5/6≈83.33→84,4/6≈66.67→67)。

为什么之前的filter/sort没成功?

  • filter是用来筛选数组元素的,无法直接计算最大值或生成新字段;
  • sort只能排序数组,要获取最大值还需额外取排序后的首尾元素,且排序会改变原数组顺序(除非深拷贝),不如直接提取最大值高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:45:34