如何使用带点作为属性层次结构的字符串形成嵌套的javascript对象

时间:2017-09-26 09:02:10

标签: javascript json object

我有一个映射对象,其中属性和Value如下所示:

var obj = {
     key: "key1.key2.key3.key4"
};

如何将obj转换为嵌套的javascript对象,如下所示:

var returnObj = {
       key1: {
            key2: {
                   key3:{
                        key4: {
                              "value": key
                        }
                   }
            }
       }
};

1 个答案:

答案 0 :(得分:2)

您可以迭代键,然后将字符串拆分为单个属性。然后创建对象(如果不存在)。稍后将原始密钥指定为值。

function convert(object) {
    var result = {};
    Object.keys(object).forEach(function (k) {
        object[k].split('.').reduce(function (o, k) {
            return o[k] = o[k] || {};
        }, result).value = k;
    });
    return result;
}

var obj = { key: "key1.key2.key3.key4" };

console.log(convert(obj));
  
.as-console-wrapper { max-height: 100% !important; top: 0; }

将最后一个键作为键。

function convert(object) {
    var result = {};
    Object.keys(object).forEach(function (k) {
        var path = object[k].split('.'),
            last = path.pop();
       
        path.reduce(function (o, k) {
            return o[k] = o[k] || {};
        }, result)[last] = k;
    });
    return result;
}

var obj = { key: "key1.key2.key3.key4" };

console.log(convert(obj));
  
.as-console-wrapper { max-height: 100% !important; top: 0; }