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

JavaScript:计算对象数组中各值与最大值的层级距离

解决方案

要实现这个需求,可以分三步完成:提取并处理值、建立值与层级的映射、生成结果数组。

步骤分解

  • 提取并处理值:先从原数组中取出所有value,去重后按从大到小排序。这样排序后的数组索引就是对应的层级距离(最大值在索引0,对应距离0;次大值在索引1,对应距离1,以此类推)。
  • 建立映射表:把排序后的每个值和它的索引(层级距离)存到一个对象里,方便后续快速查找。
  • 生成结果数组:遍历原数组的每个对象,通过映射表找到对应的层级距离,收集成最终数组。

代码实现

const array = [
  { id: 1, value: 20 },
  { id: 2, value: 10 },
  { id: 3, value: 10 },
  { id: 4, value: 3 },
  { id: 5, value: 2 },
];

// 1. 提取所有value,去重后降序排序
const uniqueValues = [...new Set(array.map(item => item.value))].sort((a, b) => b - a);

// 2. 创建值到层级距离的映射
const valueToLevel = uniqueValues.reduce((map, value, index) => {
  map[value] = index;
  return map;
}, {});

// 3. 生成结果数组
const newArray = array.map(item => valueToLevel[item.value]);

console.log(newArray); // 输出: [0, 1, 1, 2, 3]

关键细节说明

  • 使用new Set()去重,确保相同值只会对应一个层级距离;
  • 排序时用b - a实现降序,保证最大值排在最前面;
  • reduce方法高效构建映射表,后续查找的时间复杂度是O(1),整体算法的时间复杂度主要由排序决定,为O(n log n),适合大多数场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:10:33