var obj = {
a:{
value: 1
}
}
var str = 'a.value';
obj[str] = 'work';
console.log(obj);
我有这段代码,我需要使用字符串
更改对象的值答案 0 :(得分:1)
您需要拆分路径并将其用作对象的键。
如果键不是对象,则创建新对象。
function set(obj, path, value) {
var p = path.split('.'),
last = p.pop();
p.reduce(function (o, k) {
if (typeof o[k] !== 'object') {
o[k] = {};
}
return o[k];
}, obj)[last] = value;
}
var obj = { a: { value: 1 } };
set(obj, 'a.value', 'work');
set(obj, 'b.value', 42);
set(obj, 'c', 'c');
console.log(obj);
set(obj, 'c.value', 'work');
console.log(obj);
ES6
function set(obj, path, value) {
var p = path.split('.'),
last = p.pop();
p.reduce((o, k) => o[k] = typeof o[k] === 'object' ? o[k] : {}, obj)[last] = value;
}
var obj = { a: { value: 1 } };
set(obj, 'a.value', 'work');
set(obj, 'b.value', 42);
set(obj, 'c', 'c');
console.log(obj);
set(obj, 'c.value', 'work');
console.log(obj);
答案 1 :(得分:1)
递归解决方案
var obj = {
a: {
value: 1
}
}
var str = 'a.value';
function change(obj, prop, newValue) {
var a = prop.split('.');
return (function f(o, v, i) {
if (i == a.length - 1) {
o[a[i]] = v;
return o;
}
return f(o[a[i]], v, ++i);
})(obj, newValue, 0);
}
var result = change(obj, str, 'work');
console.log(JSON.stringify(obj, 0, 2));
答案 2 :(得分:-2)
您可以尝试使用eval()
eval('obj.'+str + '="work"');