javascript 字符串点语法读取对象中的值
参数说明:
target: 需要操作的数据对象, 对象或数组类型
keyPath: 需要操作的数据对象的key路径, 每个key之间用 . 分隔开, 如果 target 的值为数组时, 也可以用 . 隔开
value: 需要给目标数据设置的值
function objectKeyPathValue(target, keyPath, value){
if(!keyPath || typeof keyPath !== 'string') return target
keyPath = keyPath.split('.');
var m = target;
for(var i=0;i<keyPath.length-1;i++){
m = m[keyPath[i]]
}
if(arguments.length === 3){
m[keyPath[i]] = value;
return
}
m = m[keyPath[i]]
return m;
}
定义一个深入嵌套的对象类型数据, 用于作为测试用例
var data = {
name1:'name1',
name2:456,
name3:[{
a:'a1'
}],
fn:function(a){
alert(a || 1)
}
}
测试数据
console.log(objectKeyPathValue(data, 'name1'))
objectKeyPathValue(data, 'name1',888)
console.log(objectKeyPathValue(data, 'name1'))
console.log(objectKeyPathValue(data, 'name3.0.a'))
objectKeyPathValue(data, 'name3.3','b3')
console.log(objectKeyPathValue(data, 'name3.3'))
objectKeyPathValue(data, 'fn')(2)