如何将具有相同构造的许多数组值映射到对象? [英] how to map many arrays values that have same construct to an object?

查看:100
本文介绍了如何将具有相同构造的许多数组值映射到对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将嵌套数组的值映射到具有相同构造的对象模板?我曾尝试过一些方法,但仍然无法达到目标,任何人都可以帮我一个忙吗?这是我从后端获得的原始数据!



  const test_array = [{name:AnyManagedFundsRow,columnMeta:{a0:STRING,a1:STRING,a2:STRING,a3:DATE,a4 :DATE,a5:DOUBLE,a6:INT},rows:[[华夏基金管理有限公司,华夏大中华企业精选灵活配置混合(QDII) ,其他型基金,2016-01-20,,21.877086009428236,65135],[华夏基金管理有限公司,华夏大盘精选混合,混合型基金,2015-09 -01\" , 2017-05-02,10.307680340705128,2944]]}];  



目标数据如下所示!



  let target_data = [ {A0:{Description:华夏基金管理有限公司,类型:STRING},A1:{Description:华夏大中华企业精选灵活配置混合(QDII) ,type:STRING},A2:{Description:其他型基金,类型:STRING},A3:{描述:2016-01-20 ,类型:日期},A4:{描述:,类型:日期},A5:{描述:21.8770860094 28236,type:DOUBLE},A6:{Description:65135,type:INT}},{A0:{Description:华夏基金管理有限公司,,类型:STRING},A1:{Description:华夏大盘精选混合,类型:STRING},A2:{Description:混合型基金,类型:STRING},A3:{描述:2015-09-01,类型:日期},A4:{描述:2017 -05-02,type:DATE},A5:{Description:10.307680340705128,type:DOUBLE},A6:{Description:2944, type:INT}}];  



只是部分好。如何使用索引迭代对象?


c_obj [index] = value;


  const test_array = [{ name:AnyManagedFundsRow,columnMeta:{a0:STRING,a1:STRING,a2:STRING,a3:DATE,a4:DATE ,a5:DOUBLE,a6:INT},行:[[华夏基金管理有限公司,华夏大中华企业精选灵活配置混合(QDII),其他型基金,2016-01-20,,21.877086009428236,65135],[华夏基金管理有限公司,华夏大精选混合,混合型基金,2015-09-01,2017-05-02,10.307680340705128,2944]]}]; const tabs_obj = {}; const tabs = test_array.map(// tab(tab,index)=> {let p_obj = {},c_obj = {}; p_obj [tab.name] = []; //对象键长度让key_length = Object.keys(tab.columnMeta)。length; for(let tab incolumnMeta){let obj = {}; if(tab.columnMeta.hasOwnProperty(key)){obj.type = tab.columnMeta [key]; obj.Description =; c_obj [key.toUpperCase()] = obj; //a0.toUpperCase(); ===A0} console.log(`%c tabs $ {index}& c_obj [key.toUpperCase] = \ n`,color:#f0f,JSON.stringify(c_obj,null,2) ); // c_obj = {A0:}}让t_obj = {}; for(let.r of tab.rows){arr.map((value,index)=> {// c_obj [index] = value; t_obj [index] = value; for(key in c_obj){c_obj [key] .Description = value;}}); } p_obj [tab.name] .push(c_obj); console.log(%c \ n \ n完成c_obj!= \ n \ n,color:red,JSON.stringify(c_obj,null,4)); // c_obj = {A0:,A1:,A2:,A3:,A4:,A5:,A6:}返回p_obj; }); //格式JSON:JSON.stringify(c_obj,null,4)` 

解决方案

您可以使用指定的类型迭代和映射值。



  var test_array = [{name:AnyManagedFundsRow,columnMeta:{a0:STRING,a1:STRING,a2:STRING,a3:DATE ,a4:DATE,a5:DOUBLE,a6:INT},行:[[华夏基金管理有限公司,华夏大中华企业精选灵活配置混合(QDII),其他型基金,2016-01-20,,21.877086009428236,65135],[华夏基金管理有限公司,华夏大盘精选混合,混合型基金,2015-09-01, 2017-05-02,10.307680340705128,2944]]}],target_data = test_array [0] .rows.map(a => a.reduce((r,c,i)=> Object.assign(r ,{['A'+ i]:{Descr iption:c,type:test_array [0] .columnMeta ['a'+ i]}}),{})); console.log(target_data);  

< pre class =snippet-code-css lang-css prettyprint-override> .as-console-wrapper {max-height:100%!important;顶部:0; }


how to map a nested array's values to an object template, which has the same construct? I had tried some ways, but still can't get the goal, anybody can do me a favor? this is the original data, which I got from backend!

const test_array = [
    {
        "name": "AnyManagedFundsRow",
        "columnMeta": {
            "a0": "STRING",
            "a1": "STRING",
            "a2": "STRING",
            "a3": "DATE",
            "a4": "DATE",
            "a5": "DOUBLE",
            "a6": "INT"
        },
        "rows": [
            [
                "华夏基金管理有限公司",
                "华夏大中华企业精选灵活配置混合(QDII)",
                "其他型基金",
                "2016-01-20",
                "",
                21.877086009428236,
                65135
            ],
            [
                "华夏基金管理有限公司",
                "华夏大盘精选混合",
                "混合型基金",
                "2015-09-01",
                "2017-05-02",
                10.307680340705128,
                2944
            ]
        ]
    }
];

Target data looks like the below construct!

let target_data = [
    {
        "A0": {
            "Description": "华夏基金管理有限公司",,
            "type": "STRING"
        },
        "A1": {
            "Description": "华夏大中华企业精选灵活配置混合(QDII)",
            "type": "STRING"
        },
        "A2": {
            "Description": "其他型基金",
            "type": "STRING"
        },
        "A3": {
            "Description": "2016-01-20",
            "type": "DATE"
        },
        "A4": {
            "Description": "",
            "type": "DATE"
        },
        "A5": {
            "Description": "21.877086009428236",
            "type": "DOUBLE"
        },
        "A6": {
            "Description": "65135",
            "type": "INT"
        }
    },
    {
        "A0": {
            "Description": "华夏基金管理有限公司",,
            "type": "STRING"
        },
        "A1": {
            "Description": "华夏大盘精选混合",
            "type": "STRING"
        },
        "A2": {
            "Description": "混合型基金",
            "type": "STRING"
        },
        "A3": {
            "Description": "2015-09-01",
            "type": "DATE"
        },
        "A4": {
            "Description": "2017-05-02",
            "type": "DATE"
        },
        "A5": {
            "Description": "10.307680340705128",
            "type": "DOUBLE"
        },
        "A6": {
            "Description": "2944",
            "type": "INT"
        }
    }
];

just partly OK. how can I using index iterate an object?

c_obj[index] = value;

const test_array = [
    {
        "name": "AnyManagedFundsRow",
        "columnMeta": {
            "a0": "STRING",
            "a1": "STRING",
            "a2": "STRING",
            "a3": "DATE",
            "a4": "DATE",
            "a5": "DOUBLE",
            "a6": "INT"
        },
        "rows": [
            [
                "华夏基金管理有限公司",
                "华夏大中华企业精选灵活配置混合(QDII)",
                "其他型基金",
                "2016-01-20",
                "",
                21.877086009428236,
                65135
            ],
            [
                "华夏基金管理有限公司",
                "华夏大盘精选混合",
                "混合型基金",
                "2015-09-01",
                "2017-05-02",
                10.307680340705128,
                2944
            ]
        ]
    }
];

const tabs_obj = {};

const tabs = test_array.map(
    // tab
    (tab, index) => {
        let p_obj = {},
            c_obj = {};
        p_obj[tab.name] = [];
        // object keys length
        let key_length = Object.keys(tab.columnMeta).length;
        for (let key in tab.columnMeta) {
            let obj = {};
            if (tab.columnMeta.hasOwnProperty(key)) {
                obj.type = tab.columnMeta[key];
                obj.Description = "";
                c_obj[key.toUpperCase()] = obj;
                // "a0".toUpperCase(); === "A0"
            }
            console.log(`%c tabs${index} & c_obj[key.toUpperCase] = \n`, "color: #f0f", JSON.stringify(c_obj, null, 2));
            // c_obj = {"A0": ""}
        }
        let t_obj = {};
        for(let arr of tab.rows){
            arr.map(
                (value, index) => {
                    // c_obj[index] = value;
                    t_obj[index] = value;
                    for(key in c_obj){
                        c_obj[key].Description = value;
                    } 
                }
            );
        }
        p_obj[tab.name].push(c_obj);
        console.log("%c  \n\n finish a c_obj!  = \n\n", "color: red", JSON.stringify(c_obj, null, 4));
        // c_obj = {"A0": "","A1": "","A2": "",A3: "",A4: "", A5: "", A6: ""}
        return p_obj;
    }
);

// format JSON : JSON.stringify(c_obj, null, 4)`

解决方案

You could iterate and map the values with their assigned types.

var test_array = [{ name: "AnyManagedFundsRow", columnMeta: { a0: "STRING", a1: "STRING", a2: "STRING", a3: "DATE", a4: "DATE", a5: "DOUBLE", a6: "INT" }, rows: [["华夏基金管理有限公司", "华夏大中华企业精选灵活配置混合(QDII)", "其他型基金", "2016-01-20", "", 21.877086009428236, 65135], ["华夏基金管理有限公司", "华夏大盘精选混合", "混合型基金", "2015-09-01", "2017-05-02", 10.307680340705128, 2944]] }],
    target_data = test_array[0].rows.map(a =>
        a.reduce((r, c, i) =>
            Object.assign(r, {
                ['A' + i]: { Description: c, type: test_array[0].columnMeta['a' + i] }
            }), {}));

console.log(target_data);

.as-console-wrapper { max-height: 100% !important; top: 0; }

这篇关于如何将具有相同构造的许多数组值映射到对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆