如何在循环中保存迭代前后值?解决数组'restart'数值提取问题
解决数组中提取'restart'前后数值的问题
看起来你在处理数组中'restart'前后数值提取的问题,咱们一步步来解决它。先说说你现有代码里的几个关键点问题:
- 函数名用了
switch,这是JavaScript的保留关键字,不能用来命名函数/变量,会直接导致语法错误,得改成别的名字比如findRestartNeighbors。 - 用
for...of遍历只能拿到数组元素,拿不到索引,所以你没法直接定位到当前'restart'在数组中的位置,自然取不到前后的元素。 - 注释里的
elements[-1]是错误的写法:elements是当前遍历到的单个元素(比如'restart'或者某个数字),不是数组,就算是数组,JS里也不能用负索引直接取值(ES2022后可以用array.at(-1),但这里逻辑不对)。
修正后的解决方案
咱们调整一下思路,遍历数组时同时获取索引和元素,当遇到'restart'时,通过索引去取它的前一个和后一个元素。还要注意边界情况:如果'restart'在数组第一个位置,就没有前一个元素;在最后一个位置就没有后一个元素,这些情况要做判断避免拿到undefined。
const formattedTemps = [10,'restart',68,80,'restart',70.1,'restart',72,80,'restart',69,'restart',78,'restart',84,100,300,50,'restart',70,'restart',90,'restart',50,'restart',100]; // 改成合法的函数名 const findRestartNeighbors = (array) => { const restartPairs = []; // 用for循环遍历,同时拿到索引和元素 for (let i = 0; i < array.length; i++) { const currentElement = array[i]; if (currentElement === 'restart') { // 提取前一个值,判断索引是否大于0(避免越界) const previousValue = i > 0 ? array[i - 1] : null; // 提取后一个值,判断索引是否小于数组长度-1(避免越界) const nextValue = i < array.length - 1 ? array[i + 1] : null; // 把结果存起来,或者直接输出 restartPairs.push({ position: i, previous: previousValue, next: nextValue }); // 也可以直接打印你需要的数值 console.log(`restart在索引${i},前值:${previousValue},后值:${nextValue}`); } } // 最后可以返回所有结果,方便后续比较 return restartPairs; }; // 调用函数 const result = findRestartNeighbors(formattedTemps); console.log('所有restart的前后数值对:', result);
代码说明
- 用普通
for循环可以直接获取索引i,这样就能通过i-1和i+1访问前后元素。 - 加入了边界判断:当
i是0时,i-1是-1,这时候给previousValue赋值null(或者你需要的默认值);当i是数组最后一个索引时,i+1超出数组长度,给nextValue赋值null。 - 把每个'restart'的结果存到数组里,方便后续做比较操作(比如遍历这个结果数组,对比每个
previous和next的大小)。
内容的提问来源于stack exchange,提问作者Jason Harder
相关产品推荐
相关产品推荐

