我需要将具有规范属性的对象转换为具有嵌套属性的对象,由“。”分割。
示例:
来自:
obj['a.b.c'] = 123;
至:
obj.a.b.c = 123;
任何优雅的解决方案?
或者,也许 ExtJS 中有一个解决方案form.getValues()
可以返回一个按名称分组的字段数组,例如fieldname[1]
or fieldname.1
?
我需要将具有规范属性的对象转换为具有嵌套属性的对象,由“。”分割。
示例:
来自:
obj['a.b.c'] = 123;
至:
obj.a.b.c = 123;
任何优雅的解决方案?
或者,也许 ExtJS 中有一个解决方案form.getValues()
可以返回一个按名称分组的字段数组,例如fieldname[1]
or fieldname.1
?
看看 ClassManager "createNamespaces" 中的私有方法。这基本上是你需要做的,除了 root 不应该默认为全局,它应该默认为你的对象:
function setValue(o, key, value) {
var root = o,
parts = key.split('.'),
ln = parts.length,
part, i;
for (i = 0; i < ln; i++) {
part = parts[i];
if (typeof part != 'string') {
root = part;
} else {
if (!root[part]) {
root[part] = (i === ln - 1) ? value : {};
}
root = root[part];
}
}
}
var o = {};
setValue(o, 'a.b.c', 123);
console.log(o.a.b.c);