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

如何实现数值累加后循环回起始值?数组特定区间数值处理需求

解决数组元素循环累加的问题

我来帮你搞定这个逻辑!你需要处理的是当数组元素处于78-90区间时,累加数值后如果超过90就从65开始循环计算,对吧?先拿你给的例子说:85加10得到95,超过90,所以从65开始加(95-90)的差值,最终得到70——这个规则我们可以拆解成清晰的步骤来实现。

核心逻辑拆解

针对78-90区间内的元素:

  • 先计算元素与目标数值的总和:sum = 当前元素 + x
  • 如果总和超过90,就从65开始累加超出的部分:65 + (sum - 90)
  • 如果总和没超过90,直接保留总和即可

如果需要处理负数累加后低于65的循环情况(比如80减20得到60,要循环回到85),可以用区间模运算来实现更通用的循环逻辑,区间65到90共有26个数值,模运算能自动处理正负方向的循环。

补全后的代码实现

基础版(仅处理累加后超过90的情况)

const emptyArr = [83, 69, 82, 82];

function addingNum(x) {
  for (let k = 0; k < emptyArr.length; k++) {
    if (emptyArr[k] >= 78 && emptyArr[k] <= 90) {
      const sum = emptyArr[k] + x;
      // 处理超过90的循环逻辑
      emptyArr[k] = sum > 90 ? 65 + (sum - 90) : sum;
    } else {
      // 非目标区间的元素直接累加
      emptyArr[k] += x;
    }
  }
  return emptyArr; // 返回修改后的数组方便验证
}

// 测试示例:x=10
console.log(addingNum(10)); 
// 输出结果:[68, 79, 67, 67]

通用版(支持正负累加的循环)

如果需要处理负数累加后低于65的情况,用模运算更稳妥:

const emptyArr = [83, 69, 82, 82];

function addingNum(x) {
  const minCycle = 65;
  const maxCycle = 90;
  const cycleRange = maxCycle - minCycle + 1; // 区间内的数值总数:26

  for (let k = 0; k < emptyArr.length; k++) {
    if (emptyArr[k] >= 78 && emptyArr[k] <= 90) {
      const sum = emptyArr[k] + x;
      // 计算相对于最小循环值的偏移量,处理正负情况后取模
      let offset = sum - minCycle;
      offset = ((offset % cycleRange) + cycleRange) % cycleRange;
      emptyArr[k] = minCycle + offset;
    } else {
      emptyArr[k] += x;
    }
  }
  return emptyArr;
}

// 测试负数累加:比如x=-20,处理数组中的83
// 83-20=63,低于65,循环后得到 65 + ((63-65) %26 +26)%26 = 65+24=89
console.log(addingNum(-20)); 
// 输出结果:[89, 49, 62, 62]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:17:11