合并数组内json的相同项,不同项合并成数组

服务端可能会给我大量冗余数据让我们自己处理,如下列有多个id相同的是一条数据,却分成多个json丢出来,我们要合并一下相同项,将不同项后面变成数组;服务端给的数据如下:

		var json = [
            {
                "lotteryTypeItemName":"主胜2.68",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"胜平负",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"167299"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"客胜2.68",    // 投注项名称
                "homeScore":"0",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"1",             // 客场得分
                "lotteryTyepName":"胜平负",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"167299"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"1:0",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"比分",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"167299"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"2:1",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"比分",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"167299"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"2:2",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"比分",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"167299"           // 赛事ID
            },


            {
                "lotteryTypeItemName":"主胜2.68",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"胜平负",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"100000"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"客胜2.68",    // 投注项名称
                "homeScore":"0",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"1",             // 客场得分
                "lotteryTyepName":"胜平负",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"100000"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"1:0",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"比分",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"100000"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"2:1",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"比分",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"100000"           // 赛事ID
            },
            {
                "lotteryTypeItemName":"2:2",    // 投注项名称
                "homeScore":"1",              // 主场得分
                "orderId":"100142",		     // 订单ID
                "orderItemId":"99842",       // 子订单ID
                "matchName":"",	 // 赛事名称
                "issueNum":"4008",		     // 竞猜期数
                "matchStartTime":"2018-05-19 01:31:22", // 比赛时间
                "result":"主胜",			     // 竞猜结果
                "matchStatus":"完场",		     // 赛事赛果
                "visitScore":"0",             // 客场得分
                "lotteryTyepName":"比分",        // 玩法
                "lotteryTypeItemId":"206506",// 投注项ID
                "matchTeam":"AC米兰vs阿纳森",    			 // 对战队伍
                "lotteryTypeId":"44742",     // 玩法ID
                "matchId":"100000"           // 赛事ID
            }
        ];

我们要求变成如下数据,json的相同项合并,不同项保留key,value变成数组;

[
    {
        "lotteryTypeItemName":[
            "主胜2.68",
            "客胜2.68",
            "1:0",
            "2:1",
            "2:2"
        ],
        "homeScore":"1",
        "orderId":"100142",
        "orderItemId":"99842",
        "matchName":"",
        "issueNum":"4008",
        "matchStartTime":"2018-05-19 01:31:22",
        "result":"主胜",
        "matchStatus":"完场",
        "visitScore":"0",
        "lotteryTyepName":"胜平负",
        "lotteryTypeItemId":"206506",
        "matchTeam":"AC米兰vs阿纳森",
        "lotteryTypeId":"44742",
        "matchId":"100000"
    },
    {
        "lotteryTypeItemName":[
            "主胜2.68",
            "客胜2.68",
            "1:0",
            "2:1",
            "2:2"
        ],
        "homeScore":"1",
        "orderId":"100142",
        "orderItemId":"99842",
        "matchName":"",
        "issueNum":"4008",
        "matchStartTime":"2018-05-19 01:31:22",
        "result":"主胜",
        "matchStatus":"完场",
        "visitScore":"0",
        "lotteryTyepName":"胜平负",
        "lotteryTypeItemId":"206506",
        "matchTeam":"AC米兰vs阿纳森",
        "lotteryTypeId":"44742",
        "matchId":"167299"
    }
]


用如下代码实现:

        const map = {};
        for(const o of json){
            if(!map.hasOwnProperty(o.matchId)){
                map[o.matchId] = o;
                const val = map[o.matchId].lotteryTypeItemName;
                map[o.matchId].lotteryTypeItemName = [val];
            }else{
                map[o.matchId].lotteryTypeItemName.push(o.lotteryTypeItemName);
            }
        }
        console.log(map);

        function transform(obj){
            var arr = [];
            for(var item in obj){
            arr.push(obj[item]);
        }
            console.log(arr);
            console.log(arr[0].lotteryTypeItemName.toString());
            return arr;
        }
        transform(map);
        console.log(JSON.stringify(transform(map)));

猜你喜欢

转载自blog.csdn.net/xyphf/article/details/80403561