3

次のkey->valueオブジェクト「array」を適切な「JSON」スタイルのオブジェクトに変換する最も簡単な方法は何でしょうか。以下の例は、入力をグラフに変換することです。

var input = {
    "graph.default.seriesColor" : ["#cccccc", "#3c3c3c"],
    "graph.default.stackSeries" : false,
    "graph.default.title.text" : "Hello!",
    "graph.default.title.show" : false,
    "graph.default.axesDefaults.show" : true,
    "graph.default.axesDefaults.min" : 17,
    "graph.default.axesDefaults.max" : 20,
};

var graph = {
    default: {
        seriesColor: ["#cccccc", "#3c3c3c"],
        stackSeries: false,

        title: {
            text: "Hello!",
            show: false
        },

        axesDefault: {
            show: true,
            min: 17,
            max: 20
        }
    }
};

evalの使用を検討しましたが、すぐに再帰的に複雑になりました。

4

1 に答える 1

4

どういうわけか、私は本当にあなたにこのための関数を書きたいと感じました:

function makeObj(input)
{
    var output = {};

    for(var key in input)
    {
        var nodes = key.split('.'), dest = output;

        if(nodes.length < 1)
            continue;

        for(var i = 0; i < (nodes.length - 1); ++ i)
        {
            var node = nodes[i];

            dest = (dest[node] === undefined) ?
                        (dest[node] = {}) : dest[node];
        }

        dest[nodes[nodes.length - 1]] = input[key];
    }

    return output;
}

graph = makeObj(input);

明らかにソリューションとは異なりeval、これはあなたが説明した正確なフォーマット(xyz)の文字列のみを受け入れます。

于 2012-06-27T23:08:07.120 に答える