如何在JavaScript或ExtJS中使用:obj[';a.b.c';]=123=>;obj.a.b.c=123?

如何在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

我需要将具有cannonical属性的对象转换为具有嵌套属性的对象,以“.”分隔

示例:
发件人:

致:

有优雅的解决方案吗


或者,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);