zoukankan      html  css  js  c++  java
  • 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)来合并同类项

        var yAxis = [];
        var datalist = [];
        for (var i = 0; i < originaldatalist.length; i++) {
            yAxis = yAxis.concat(originaldatalist[i].name);
            datalist = datalist.concat(originaldatalist[i].data);
        }
    
      //用个hash表存一下name在结果里对应的位置,就能将时间复杂度从幂函数降低到线性的时间复杂度
    var hashTable = {}; var datalist = datalist.reduce(function (result, _ref) { var name = _ref.name, data = _ref.data; hashTable[name] !== undefined ? result[hashTable[name]].data.push(data) : hashTable[name] = result.push({ name: name, data: [data] }) - 1; return result; }, []); console.log(yAxis.join(",")); console.log(datalist);
  • 相关阅读:
    shell 脚本判断linux 的发行版本
    notepad++ 正则学习记录
    360 加固分析
    Android的静默安装
    Linux下调整根目录的空间大小
    linux 隐藏权限
    i针对网段开放端口 (命令行设置)
    python 删除文件/夹
    字符串截取
    echo 不换行
  • 原文地址:https://www.cnblogs.com/sanqianjin/p/9336478.html
Copyright © 2011-2022 走看看