如何在JavaScript或ExtJS中使用:obj[';a.b.c';]=123=>;obj.a.b.c=123?
我需要将具有cannonical属性的对象转换为具有嵌套属性的对象,以“.”分隔 示例:如何在JavaScript或ExtJS中使用:obj[';a.b.c';]=123=>;obj.a.b.c=123?,javascript,extjs4,Javascript,Extjs4,我需要将具有cannonical属性的对象转换为具有嵌套属性的对象,以“.”分隔 示例: 发件人: 致: 有优雅的解决方案吗 或者,ExtJS中有一种解决方案,可以使form.getValues()返回按名称分组的字段数组,如fieldname[1]或fieldname.1?查看ClassManager“createNamespaces”中的私有方法。这基本上就是您需要做的,除了root不应该默认为global,它应该默认为您的对象: function setValue(o, key, valu
发件人: 致: 有优雅的解决方案吗
或者,ExtJS中有一种解决方案,可以使
form.getValues()
返回按名称分组的字段数组,如fieldname[1]
或fieldname.1
?查看ClassManager“createNamespaces”中的私有方法。这基本上就是您需要做的,除了root不应该默认为global,它应该默认为您的对象:
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);
函数设置值(o、键、值){
var root=o,
零件=键。拆分('.'),
ln=零件长度,
第一部分;
对于(i=0;i
因此,您有一个字符串,其中包含a.b.c
,您希望用作对象属性查找,或者您的代码当前是否分配了类似于obj['a.b.c']
的属性,但您希望使用obj.a.b.c
来分配属性?我非常困惑。@Quentin我只是在寻找同样的问题,因为我记得我写了一个公认的答案:)
obj.a.b.c = 123;
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);