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

如何从含字符串与数字的嵌套数组中获取带对应月份的最值

从嵌套混合数组中获取带月份的利润最值

问题场景

现有一个嵌套数组monthsNet,每个元素格式为[月份字符串, 利润数值],需要从中找出利润的最大值和最小值,并且返回包含对应月份的结果,而不是仅返回数字。

示例数组:

let monthsNet = [
  [ 'Jan-2010', 116771 ], [ 'Feb-2010', -662642 ], [ 'Mar-2010', -391430 ],
  [ 'Apr-2010', 379920 ], [ 'May-2010', 212354 ], [ 'Jun-2010', 510239 ],
  [ 'Jul-2010', -428211 ], [ 'Aug-2010', -821271 ], [ 'Sep-2010', 693918 ],
  [ 'Oct-2010', 416278 ], [ 'Nov-2010', -974163 ], [ 'Dec-2010', 860159 ],
  [ 'Jan-2011', -1115009 ], [ 'Feb-2011', 1033048 ], [ 'Mar-2011', 95318 ],
  [ 'Apr-2011', -308093 ], [ 'May-2011', 99052 ], [ 'Jun-2011', -521393 ],
  [ 'Jul-2011', 605450 ], [ 'Aug-2011', 231727 ], [ 'Sep-2011', -65187 ],
  [ 'Oct-2011', -702716 ], [ 'Nov-2011', 177975 ], [ 'Dec-2011', -1065544 ]
]

原代码的局限

之前用于纯数字数组的代码仅能返回单独的数值,无法关联对应的月份:

let max = total[0];
let min = total[0];
for(i=0; i < total.length;i++){
  if(total[i] >= max){
   max = total[i]
   }
  if(total[i] <= min){
  min = total[i]
  }
}
console.log("Greatest Increase in Profits: $" + max)
console.log("Greatest Decrease in Profits: $" + min)

输出结果:

Greatest Increase in Profits: $ 1033048
Greatest Increase in Profits: $ -1115009

期望输出格式:

利润最高增长:Feb-2011 $ 1033048
利润最大降幅:Jan-2011 $ -1115009

解决方案

方案1:修改循环逻辑

核心是跟踪整个嵌套元素,比较时取每个元素的第二个值(利润)进行判断:

// 初始化最值元素为数组第一个元素
let maxItem = monthsNet[0];
let minItem = monthsNet[0];

for (let i = 1; i < monthsNet.length; i++) {
  // 比较利润值,更新最大利润元素
  if (monthsNet[i][1] > maxItem[1]) {
    maxItem = monthsNet[i];
  }
  // 比较利润值,更新最小利润元素
  if (monthsNet[i][1] < minItem[1]) {
    minItem = monthsNet[i];
  }
}

// 格式化输出结果
console.log(`利润最高增长:${maxItem[0]} $ ${maxItem[1]}`);
console.log(`利润最大降幅:${minItem[0]} $ ${minItem[1]}`);

方案2:使用Array.reduce()简化代码

用reduce方法可以更简洁地找出目标元素:

// 筛选出利润最大的元素
const maxItem = monthsNet.reduce((prev, curr) => curr[1] > prev[1] ? curr : prev);
// 筛选出利润最小的元素
const minItem = monthsNet.reduce((prev, curr) => curr[1] < prev[1] ? curr : prev);

// 输出结果
console.log(`利润最高增长:${maxItem[0]} $ ${maxItem[1]}`);
console.log(`利润最大降幅:${minItem[0]} $ ${minItem[1]}`);

两种方案的输出结果均符合预期:

利润最高增长:Feb-2011 $ 1033048
利润最大降幅:Jan-2011 $ -1115009

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:40:34