如何在JavaScript数组指定索引区间内使用reduce获取最大值索引?
限定索引区间内找出数组最大值的索引
我在网站中设置了一组输入框,用户输入的数值会存入数组inputtedVals。目前有一段JavaScript代码可以找出数组中的最大值,并将其在原数组的索引位置存储到变量HighValPos中:
var HighValPos = inputtedVals.reduce((highestInd, TheValue, TheValueInd) => { return TheValue > inputtedVals[highestInd] ? TheValueInd : highestInd; }, 0);
现在需要修改这段代码,让它仅对索引值在firstEl(值为0)到lastEl(值为6)指定区间内的数组元素应用上述.reduce()逻辑,请问该如何修改?
解决方案
方法一:在reduce回调中直接过滤区间外元素
在.reduce()的回调函数里添加索引判断,跳过区间外的元素,同时将初始值设为区间的起始索引firstEl,确保基准值从区间内的第一个元素开始:
var firstEl = 0; var lastEl = 6; var HighValPos = inputtedVals.reduce((highestInd, TheValue, TheValueInd) => { // 跳过区间外的元素,直接返回当前记录的最大索引 if (TheValueInd < firstEl || TheValueInd > lastEl) { return highestInd; } // 区间内元素参与最大值比较逻辑 return TheValue > inputtedVals[highestInd] ? TheValueInd : highestInd; }, firstEl); // 初始值设为区间起始索引,避免基准值不在目标区间内
方法二:先截取目标区间子数组再处理
先通过slice()截取原数组中指定区间的子数组,找到子数组内最大值的索引后,再转换为原数组的对应索引:
var firstEl = 0; var lastEl = 6; // slice左闭右开,所以第二个参数是lastEl + 1,确保包含索引为lastEl的元素 var subArray = inputtedVals.slice(firstEl, lastEl + 1); // 找出子数组中最大值的索引 var subHighInd = subArray.reduce((highestInd, val, ind) => { return val > subArray[highestInd] ? ind : highestInd; }, 0); // 转换为原数组的索引 var HighValPos = subHighInd + firstEl;
内容的提问来源于stack exchange,提问作者alec22
相关产品推荐
相关产品推荐

