Echart数据转换(水平数据变成垂直数据)

    var originaldatalist = [
        {
            name: "周一",
            data: [
                {
                    name: "直接访问",
                    data: 320
                },
                {
                    name: "邮件营销",
                    data: 120
                },
                {
                    name: "联盟广告",
                    data: 220
                },
                {
                    name: "视频广告",
                    data: 150
                },
                {
                    name: "搜索引擎",
                    data: 820
                }
            ]
        },
        {
            name: "周二",
            data: [
                {
                    name: "直接访问",
                    data: 302
                },
                {
                    name: "邮件营销",
                    data: 132
                },
                {
                    name: "联盟广告",
                    data: 182
                },
                {
                    name: "视频广告",
                    data: 212
                },
                {
                    name: "搜索引擎",
                    data: 832
                }
            ]
        },
        {
            name: "周三",
            data: [
                {
                    name: "直接访问",
                    data: 301
                },
                {
                    name: "邮件营销",
                    data: 101
                },
                {
                    name: "联盟广告",
                    data: 191
                },
                {
                    name: "视频广告",
                    data: 201
                },
                {
                    name: "搜索引擎",
                    data: 901
                }
            ]
        }
    ]

 转换成

    var datalist = [
        {
            name: "直接访问",
            data: [320, 302, 301, 334, 390, 330, 320]
        },
        {
            name: "邮件营销",
            data: [120, 132, 101, 134, 90, 230, 210]
        },
        {
            name: "联盟广告",
            data: [220, 182, 191, 234, 290, 330, 310]
        },
        {
            name: "视频广告",
            data: [150, 212, 201, 154, 190, 330, 410]
        },
        {
            name: "搜索引擎",
            data: [820, 832, 901, 934, 1290, 1330, 1320]
        }
    ];

1、使用三层循环

    var yAxis = [];
    var datalist = [];
    for (var i = 0; i < originaldatalist.length; i++) {
        yAxis.push(originaldatalist[i].name);
        for (var j = 0; j < originaldatalist[i].data.length; j++) {
            //判断是否有值
            var tempk = -1;
            for (var k = 0; k < datalist.length; k++) {
                if (datalist[k].name == originaldatalist[i].data[j].name) {
                    tempk = k;
                }
            }
            //有值添加无值新建
            if (tempk >= 0) {
                datalist[tempk].data.push(originaldatalist[i].data[j].data);
            } else {
                var temp = {
                    name: originaldatalist[i].data[j].name,
                    data: [originaldatalist[i].data[j].data]
                }
                datalist.push(temp);
            }
        }
    }

2、先使用concat扁平化为一个数组,再使用双循环合并同类项

 var yAxis = [];
    var datalist = [];
    for (var i = 0; i < originaldatalist.length; i++) {
        yAxis = yAxis.concat(originaldatalist[i].name);
        datalist = datalist.concat(originaldatalist[i].data);
    }
    for (var i = 0; i < datalist.length; i++) {
        var listtemp = [datalist[i].data];
        for (var j = i + 1; j < datalist.length; j++) {
            if (datalist[i].name == datalist[j].name) {
                listtemp.push(datalist[j].data);
                datalist.splice(j, 1);
                j--;
            }
        }
        datalist[i].data = listtemp;
    }

3、先使用concat扁平化,再使用reduce合并同类项

var yAxis = [];
    var datalist = [];
    for (var i = 0; i < originaldatalist.length; i++) {
        yAxis = yAxis.concat(originaldatalist[i].name);
        datalist = datalist.concat(originaldatalist[i].data);
    }
    var xx = datalist.reduce(function (res, item) {
        //findIndex: 传入一个测试条件(函数)符合条件的数组第一个元素位置。
        var index = res.findIndex(function (v) {
            return v.name == item.name;
        });
        if (index > -1) {
            if (Array.isArray(res[index].data)) {
                res[index].data.push(item.data);
            } else {
                var listtemp = [res[index].data];
                listtemp.push(item.data);
                res[index].data = listtemp;
            }
        } else {
            res.push(item);
        }
        return res;
    }, []);
    datalist = xx;
    console.log(yAxis.join(","));
    console.log(datalist);

 4、据说还有hash算法

猜你喜欢

转载自www.cnblogs.com/sanqianjin/p/9336478.html