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

为JavaScript对象数组添加逐次递减25的order_size属性时forEach未生效的解决方法

问题原因

你贴出的代码存在两处核心逻辑偏差:

  • 外层声明的order_size变量在循环全程从未被更新,每次计算时都是直接取初始值100做减法,根本没有形成逐次递减的累积效果
  • 赋值顺序错位:需求要求第一个对象取100作为初始值,原代码直接从减后的值开始赋值,匹配不上预期的数值序列

你实际测试时观察到所有对象的order_size都是100的情况,大概率是本地代码存在笔误:按你贴出的原代码逻辑运行,计算出的结果应该是所有值都为75,并非100;如果出现全100的结果,可以检查下循环内的赋值逻辑是不是被其他代码覆盖了。

修正实现方案

方案1:在你原有forEach逻辑上调整

调整循环内的执行顺序:先把当前维护的尺寸值赋给对象,再做递减计算更新外部变量,保证下一个循环周期拿到的是减后的值:

let order_size = 100;
arr_obj.forEach(d => {
  // 先给当前对象赋值当前的尺寸值
  d.order_size = order_size;
  // 赋值完成后再递减尺寸值,供下一个对象使用
  order_size -= 25;
});

方案2:利用forEach自带的索引参数,省去外部变量维护

这种方式不会引入额外的外部状态,代码可维护性更强:数组索引从0开始,每个元素的order_size完全可以通过索引直接计算,刚好对应“首项100、逐次减25”的规则:

arr_obj.forEach((d, index) => {
  d.order_size = 100 - index * 25;
});

两种方案运行后得到的数组结构,和你给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 21:15:05