Ale*_*lex 23 javascript object
给定对象属性路径的字符串,如何动态设置此属性.
给定此示例对象:
var obj = {
a: {
b: [ { c: 'Before' } ]
}
};
Run Code Online (Sandbox Code Playgroud)
它应该能够使用这样的辅助函数设置值:
setToValue(obj, 'After', 'a.b.0.c');
Run Code Online (Sandbox Code Playgroud)
我用以下代码尝试了它.但如果变量不是引用,则父级是副本.
function setToValue(obj, value, path) {
var arrPath = path.split('.'),
parent = obj;
for (var i = 0, max = arrPath.length; i < max; i++) {
parent = parent[arrPath[i]];
}
parent = value;
}
Run Code Online (Sandbox Code Playgroud)
Tig*_*ine 33
a)简单的ab [0] .c ='之后'有什么问题?
至于方法:
function setToValue(obj, value, path) {
var i;
path = path.split('.');
for (i = 0; i < path.length - 1; i++)
obj = obj[path[i]];
obj[path[i]] = value;
}
Run Code Online (Sandbox Code Playgroud)
这里的JSFiddle:http://jsfiddle.net/QycBz/24/
Die*_*itz 22
这是一个完整的解决方案.
如果对象不存在,也会创建对象.
function setValue(obj, path, value) {
var a = path.split('.')
var o = obj
while (a.length - 1) {
var n = a.shift()
if (!(n in o)) o[n] = {}
o = o[n]
}
o[a[0]] = value
}
function getValue(obj, path) {
path = path.replace(/\[(\w+)\]/g, '.$1')
path = path.replace(/^\./, '')
var a = path.split('.')
var o = obj
while (a.length) {
var n = a.shift()
if (!(n in o)) return
o = o[n]
}
return o
}
Run Code Online (Sandbox Code Playgroud)