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

如何实现日期数组去重并匹配对应每日最高花费数组?

问题解决:合并日期数组并计算每日最高花费

问题描述

现有两个数组,一个是日期数组,一个是当日花费数组:

var arrayOfDates = [01.07, 01.07, 03.07, 04.07, 05.07, 05.07, 05.07]
var arrayofCosts = [3, 8, 2, 2, 8, 6, 9]

需要将arrayOfDates过滤为唯一元素,同时让第二个数组显示每日的最高花费,预期结果如下:

var arrayOfDatesModifed = [01.07, 3.07, 04.07, 05.07]
var arrayofNumbersModifed = [8, 2, 2, 9]

需求分为三个阶段:

  1. 过滤arrayOfDates得到唯一元素
  2. 为每个唯一日期找到arrayofCosts中的对应项
  3. 找出每个日期对应的arrayofCosts中的最大值

解决方案

可以通过对象映射的方式一次性完成三个阶段的任务,逻辑清晰且高效:

基础实现(不严格保证顺序)

// 创建映射对象,存储每个日期的最高花费
const dateCostMap = {};
for (let i = 0; i < arrayOfDates.length; i++) {
  const date = arrayOfDates[i];
  const cost = arrayofCosts[i];
  // 若日期未记录,或当前花费更高,则更新
  if (!dateCostMap[date] || cost > dateCostMap[date]) {
    dateCostMap[date] = cost;
  }
}

// 提取目标数组
const arrayOfDatesModifed = Object.keys(dateCostMap).map(Number); // 转为数字类型,若需字符串可移除map(Number)
const arrayofNumbersModifed = Object.values(dateCostMap);

保留原始顺序的实现

如果需要和日期首次出现的顺序完全一致,可调整为:

const dateCostMap = {};
const uniqueDatesOrder = [];

for (let i = 0; i < arrayOfDates.length; i++) {
  const date = arrayOfDates[i];
  const cost = arrayofCosts[i];
  
  if (!dateCostMap[date]) {
    // 首次出现的日期,加入顺序数组
    uniqueDatesOrder.push(date);
    dateCostMap[date] = cost;
  } else if (cost > dateCostMap[date]) {
    // 已存在的日期,更新最高花费
    dateCostMap[date] = cost;
  }
}

// 生成目标数组
const arrayOfDatesModifed = uniqueDatesOrder;
const arrayofNumbersModifed = uniqueDatesOrder.map(date => dateCostMap[date]);

逻辑说明

  • 遍历两个数组,用对象记录每个日期的最高花费:每遇到一个日期,对比当前花费与对象中已存的最大值,保留较大值
  • 基础实现通过Object.keys()和Object.values()直接提取结果;顺序实现则额外维护一个数组记录日期首次出现的顺序,确保结果顺序与预期一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:45:55