【问题标题】:Javascript object transform with underscrore.js or something else使用 underscore.js 或其他东西转换 Javascript 对象
【发布时间】:2017-03-12 19:44:37
【问题描述】:

我有一个对象,如下所示:

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 或其他东西轻松地进行此更改吗?

【问题讨论】:

    标签: javascript object underscore.js transform


    【解决方案1】:

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

    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; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多