JavaScript如何批量更新数组中所有对象的属性值并按比例上调薪资
原代码问题排查
你的代码存在以下几个错误,导致无法得到预期结果:
- 属性名访问错误:遍历的每个元素对象存为
salaryObj,薪资对应的属性是salary,你写的salaryObj.salaryObj是不存在的属性,取值为undefined - 上调比例写死:代码中固定乘10,没有使用传入的
raise形参,无法适配不同的上调比例 - 返回结构错误:
map回调仅返回了计算后的薪资数值,丢失了name等其他属性,没有返回完整的对象结构 - 边界处理错误:传入空数组时应直接返回空数组,不需要返回包含空对象的
[{}] - 缺少返回值:计算得到的
raiseArray没有被return,函数默认返回undefined - 未实现取整逻辑:没有按要求对计算后的薪资做向上取整处理
正确实现代码
function raiseSalary(arr, raise) { if (arr.length === 0) return []; return arr.map(employee => { const updatedSalary = Math.ceil(employee.salary * (1 + raise / 100)); return { ...employee, salary: updatedSalary }; }); }
实现说明
- 采用展开运算符
...employee保留原对象的所有属性,仅覆盖更新salary字段,不会修改原始数组的内容,避免副作用 - 使用
Math.ceil()对计算后的薪资做向上取整,满足取整要求 - 直接返回
map遍历生成的新数组,逻辑简洁 - 传入示例参数测试时,计算结果完全匹配预期:3000上调10%为3300、2000上调10%为2200、4500上调10%为4950
内容的提问来源于stack exchange,提问作者Unonymous
相关产品推荐
相关产品推荐

