[JS]更改多级对象值
[JS]Change multi level object value
var obj = {
a:{
value: 1
}
}
var str = 'a.value';
obj[str] = 'work';
console.log(obj);
我有这段代码,我需要使用字符串更改对象的值
带递归的解决方案
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));
您需要拆分路径并将其用作对象的键。
如果键不是对象,则会创建一个新对象。
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);
你可以试试eval()
eval('obj.'+str + '="work"');
相关文章:
- 使用PHP,我如何将JSON blob附加到现有的多级JSON对象
- 通过服务与多级对象交互
- 设置javascript对象多级属性的简单方法
- JSON多级对象
- 在多级json对象中使用变量作为键
- 在具有多级对象的 JavaScript 中发布请求
- 如何使用 JsonPath 获取表达式上的多级对象
- [JS]更改多级对象值
- 使用来自 JSON 对象的数组表示法进行多级属性检索
- 多级对象 JavaScript
- 动态创建用于jQuery-jTable的多级Javascript对象
- 什么'在处理多级对象时,确保JavaScript对象已设置且未定义的最佳实践
- 如何检测多级对象是否具有未定义或null属性
- 使用字符串数组创建多级对象,将数组解析为JS对象
- JavaScript创建多级对象
- 转换多级对象值到字符串javascript
- JS比较变量到多级对象
- 从多级对象数组中重新赋值
- 多级对象到单级对象
- Angular2:将多级对象作为路由参数传递