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

JavaScript计算数组4个最高值、4个最低值之和的问题求解

问题根因

slice() 方法传入负整数参数时,逻辑是从数组尾部倒数定位截取起点,你写的 sorted.slice(-1) 等价于截取数组倒数第1个元素到末尾,所以只能拿到最后一个最大值,自然无法得到前4个最小值元素。

原有逻辑修复

对于长度固定为5的升序排序数组,两个求和的截取规则应该是:

  • 4个最高值求和:剔除索引为0的最小元素,保留索引1到末尾的4个元素,你原来写的 sorted.slice(1) 逻辑是正确的
  • 4个最低值求和:剔除索引为4的最大元素,保留索引0到索引3的前4个元素,对应写法是 sorted.slice(0, 4)

修复后可正常运行的基础版代码:

var arr = [3, 1, 5, 7, 9];

function miniMaxSum(arr)  {
  // 注意:求和变量必须定义在函数内部,避免全局污染导致多次调用结果累加错误
  var totalMaxSum = 0;
  var totalMinSum = 0;
  var sorted = arr.sort(function(a, b){return a - b});
   
  var maxArr = sorted.slice(1);
  var minArr = sorted.slice(0, 4);

  for(var count = 0; count < maxArr.length; count++) {
    totalMaxSum += maxArr[count];
  }
  for(var count = 0; count < minArr.length; count++) {
    totalMinSum += minArr[count];
  }

  console.log("4个最小值求和:" + totalMinSum);
  console.log("4个最大值求和:" + totalMaxSum);
}

miniMaxSum(arr);
更简洁的实现方案

不需要手写for循环做累加,直接用数组内置的reduce方法即可完成求和,同时可以先拷贝数组再排序,避免sort方法修改原数组:

function miniMaxSum(arr) {
  // 浅拷贝后排序,不修改原数组
  const sorted = [...arr].sort((a, b) => a - b);
  // 通用求和逻辑
  const calcSum = list => list.reduce((acc, cur) => acc + cur, 0);
  const minSum = calcSum(sorted.slice(0, 4));
  const maxSum = calcSum(sorted.slice(1));
  console.log(minSum, maxSum);
  return [minSum, maxSum];
}

// 测试用例
miniMaxSum([3,1,5,7,9]); // 输出 16 24,和预期结果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:21:46