0

正規のプロパティを持つオブジェクトを、「.」で分割されたネストされたプロパティを持つオブジェクトに変換する必要があります。

例:
差出人:

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

に:

obj.a.b.c = 123;

エレガントなソリューションはありますか?

または、またはform.getValues()のような名前でグループ化されたフィールドの配列を返すようにする ExtJS のソリューションがあるかもしれません。fieldname[1]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 に答える