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

如何在循环中保存迭代前后值?解决数组'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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:46:28