Javascript对象转换与下划线.js或其他东西

Javascript object transform with underscrore.js or something else

本文关键字:其他 js 下划线 对象 转换 Javascript      更新时间:2023-09-26

我有一个像下面这样的对象:

var obj1 = {
    "Prop1": {
        "Prop2": {
            "Prop2.1": "value1",
            "Prop2.2": "value2"
        },
        "Prop3": {
            "Prop3.1": "value3",
            "Prop3.2": "value4"
        },
        "Prop4": {
            "Prop4.1": "value5",
            "Prop4.2": "value6",
            "Prop4.3": "value7"
        }
    }
};

但是我想把这个对象转换成下面的对象:

var obj1 = {
    "data": [
    {
            "id": "Prop1",
            "data": [
                {
                    "id": "Prop2",
                    "data": [
                        {"id": "Prop2.1","value": "value1"},
                        {"id": "Prop2.2","value": "value2"}
                    ]
                },
                {
                    "id": "Prop3",
                    "data": [
                        {"id": "Prop3.1","value": "value3"},
                        {"id": "Prop3.2","value": "value4"}
                    ]
                },
                {
                    "id": "Prop4",
                    "data": [
                        {"id": "Prop4.1","value": "value5"},
                        {"id": "Prop4.2","value": "value6"},
                        {"id": "Prop4.3","value": "value7"}
                    ]
                },
            ]
        },
    ]
};

可以看到,对象结构将完全不同。我可以用underscore.js或其他东西轻松地进行此更改吗?

您可以使用迭代或递归的方法来构建新对象。

function convert(object) {
    return Object.keys(object).map(function (k) {
        var o = { id: k };
        if (object[k] !== null && typeof object[k] === 'object') {
            o.data = convert(object[k]);
        } else {
            o.value = object[k];
        }
        return o;
    });
}
var source = { Prop1: { Prop2: { "Prop2.1": "value1", "Prop2.2": "value2" }, Prop3: { "Prop3.1": "value3", "Prop3.2": "value4" }, Prop4: { "Prop4.1": "value5", "Prop4.2": "value6", "Prop4.3": "value7" } } },
    target = { data: convert(source) };
console.log(target);
.as-console-wrapper { max-height: 100% !important; top: 0; }