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
相关产品推荐
相关产品推荐

