如何高效修改JS对象指定key的value并乘2,是否需要拷贝原对象?
JS对象指定属性批量修改方案
要不要拷贝原对象?
- 不需要保留原对象原始值:直接修改原对象即可,无额外性能开销
- 需要保留原对象不变:先做浅拷贝再修改,避免污染原对象影响其他业务逻辑
实现代码
1. 直接修改原对象(无保留原数据需求)
仅修改2个key的极简写法:
ob.a *= 2 ob.b *= 2
8个key的批量高效写法,无需重复写多行赋值代码:
// 把需要修改的key统一放到数组中批量遍历处理 ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'].forEach(key => { // 加判断是为了避免误改继承属性,确定key都是对象自身属性可去掉判断更简洁 if (ob.hasOwnProperty(key)) ob[key] *= 2 })
2. 不修改原对象(需保留原始数据)
先浅拷贝原对象,再修改拷贝后的新对象即可,一级属性用扩展运算符做浅拷贝性能极高:
const newOb = {...ob} ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'].forEach(key => { if (newOb.hasOwnProperty(key)) newOb[key] *= 2 })
内容的提问来源于stack exchange,提问作者cgvfgf34
相关产品推荐
相关产品推荐

