0

我需要将具有规范属性的对象转换为具有嵌套属性的对象,由“。”分割。

示例:
来自:

obj['a.b.c'] = 123;

至:

obj.a.b.c = 123;

任何优雅的解决方案?

或者,也许 ExtJS 中有一个解决方案form.getValues()可以返回一个按名称分组的字段数组,例如fieldname[1]or fieldname.1

4

1 回答 1

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);
于 2013-05-30T12:46:44.540 回答