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

JavaScript数组求和问题:保留前四大元素的重复项

解决方案

问题根源

你的现有代码通过多轮遍历筛选最大值时,使用了严格小于(<)的判断条件,导致重复的最大值被排除;同时初始值硬编码为[0,0,0,0],在数组包含负数时会出错;另外未处理数组长度≤4的场景。

修改后的代码

function largest(arr) {
    // 处理数组长度≤4的情况:直接返回所有元素和对应总和
    if (arr.length <= 4) {
        const total = arr.reduce((acc, current) => acc + current, 0);
        console.log('元素数组:', arr);
        console.log('元素总和:', total);
        return { elements: arr, sum: total };
    }

    // 创建数组副本并降序排序,避免修改原数组
    const sortedArr = [...arr].sort((a, b) => b - a);
    // 提取前4个元素(自动保留重复的最大值)
    const topFourElements = sortedArr.slice(0, 4);
    // 计算前4个元素的总和
    const total = topFourElements.reduce((acc, current) => acc + current, 0);

    console.log('前四大元素数组:', topFourElements);
    console.log('元素总和:', total);
    return { elements: topFourElements, sum: total };
}

// 测试用例1:含重复最大值的数组
const arr1 = [4,5,-2,3,1,2,6,6];
largest(arr1); // 输出前四大元素[6,6,5,4],总和21

// 测试用例2:长度≤4的数组
const arr2 = [1,1,1,-5];
largest(arr2); // 输出原数组[1,1,1,-5],总和-2

// 测试用例3:全负数数组
const arr3 = [-1,-3,-2,-5,-4];
largest(arr3); // 输出[-1,-2,-3,-4],总和-10

关键修改说明

  • 参数化数组:将数组作为函数参数传入,避免全局变量依赖,提升函数复用性
  • 短数组处理:直接判断数组长度,≤4时直接计算所有元素的和
  • 排序取前N:通过降序排序后截取前4个元素,自然保留重复的最大值,逻辑更简洁
  • 数组副本:使用[...arr]创建原数组的浅拷贝,避免排序操作修改原数组
  • 通用求和:用reduce方法计算总和,比手动累加更简洁且适用于所有数值数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:25:29