Javascript 从数组创建深度未知的对象的通用解决方案

Javascript 从数组创建深度未知的对象的通用解决方案,javascript,Javascript,我需要创建一个JSON对象,如下所示: { "app_name": "foo", "meta": { "title": "foo", "lang": "bar" }, "teaser": { "foo": { "headline": "foo", "subline": "bar" } } } 对象树以以下表示形式提供: var translat

我需要创建一个JSON对象,如下所示:

{
    "app_name": "foo",
    "meta": {
        "title": "foo",
        "lang": "bar"
    },
    "teaser": {
        "foo": {
            "headline": "foo",
            "subline": "bar"
        }
    }
}
对象树以以下表示形式提供:

var translations = [
    {
        "key": "app_name",
        "val": "foo"
    },
    {
        "key": "meta.title",
        "val": "foo"
    },
    {
        "key": "meta.lang",
        "val": "bar"
    },
    {
        "key": "teaser.foo.headline",
        "val": "foo"
    },
    {
        "key": "teaser.foo.subline",
        "val": "bar"
    }
];
现在,我还没有找到一个通用的解决方案。下面是一些适用于给定(简化)示例的代码:

但这既丑陋又不可靠。我想更换这个部件:

    if (keyDepth === 1) {
        finalObject[keyArray[0]] = translationVal;
    } else if (keyDepth === 2) {
       //...
    }


有什么想法吗?

如果属性不存在,可以通过使用默认对象来采用迭代方法

函数设置值(对象、键、值){
var path=key.split('.'),
last=path.pop();
reduce(函数(o,k){
返回o[k]=o[k]|{};
},object)[last]=值;
}
var translations=[{key:“app_name”,val:“foo”},{key:“meta.title”,val:“foo”},{key:“meta.lang”,val:“bar”},{key:“trister.foo.headline”,val:“foo”},{key:“trister.foo.subline”,val:“bar”},
对象={};
forEach(函数(o){
设置值(对象、o.key、o.val);
});
console.log(对象)

。作为控制台包装{max height:100%!important;top:0;}
似乎有点过于宽泛,但我建议使用某种规格化(例如),您应该使用递归函数
    if (keyDepth === 1) {
        finalObject[keyArray[0]] = translationVal;
    } else if (keyDepth === 2) {
       //...
    }
    if (keyDepth === 1) {
        finalObject[keyArray[0]] = translationVal;
    } else {
        //some generic solution, which works for any deepth
    }