【JavaScript笔记】如何快速设置Object多维对象的某个属性或值
前端在部分业务下会有一种场景,需要修改某个对象单独的属性或值且修改后立即生效(如页面缓存、样式布局DIY调整配置),当这个对象是3维或者3维以上时,
且传参的数据不一致,如果配置项较多,死方法就是每个对象都去一遍(比较愚蠢的写法)
这个时候的代码量就比较多,那么如何减少这个代码量呢??
下面我就写了一个函数,可以通过固定代码即可达到减少代码量
const setValue = function(data, key, value) { if ('object' !== typeof data) { return null } if (key.indexOf('.') > 0) { let index1 = key.split('.')[0]; let index2 = key.replace(new RegExp('^' + index1 + '\.', 'g'), ''); if (data.hasOwnProperty(index1)) { data[index1] = setValue(data[index1], index2, value); } return data; } else { if (data.hasOwnProperty(key)) { data[key] = value } return data } }
以下是测试效果和测试代码
const setValue = function(data, key, value) { if ('object' !== typeof data) { return null } if (key.indexOf('.') > 0) { let index1 = key.split('.')[0]; let index2 = key.replace(new RegExp('^' + index1 + '\.', 'g'), ''); if (data.hasOwnProperty(index1)) { data[index1] = setValue(data[index1], index2, value); } return data; } else { if (data.hasOwnProperty(key)) { data[key] = value } return data } } const a = { a: '1', b: { c: { name: { dd:'测试' }, value: 'data' } } } console.info(JSON.parse(JSON.stringify(a))); console.info(setValue(a, 'b.c.value', '66666'));
-- 展开阅读全文 --