为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
相关产品推荐
相关产品推荐

