循环多维数组以生成适用于Google图表的多维数组

7

我现在正在尝试通过Google图表生成一份报告。

我正在从我的node.js服务器端代码中的MYSQL数据库中提取信息,并使用socket.io将其传递到客户端,其中包含一个多维数组,如下所示:

[ [ 'ANSWERED', '477', 728 ],[ 'BUSY', '477', 48 ],[ 'NO ANSWER', '477', 277 ],[ 'ANSWERED', '478', 88 ],[ 'BUSY', '478', 24 ],[ 'NO ANSWER', '478', 56 ] ]

我目前正在循环遍历该数组并尝试提取值,以便符合Google Charts的以下格式:

[ ['477', 728, 48, 277 ],[ '478',88, 24, 56]]

我不知道如何使其符合这种格式,也没有找到方法来达成这样的目标,因此无法将这些信息插入我的多维数组中以生成谷歌表格报告。

目前我所拥有的代码是:

socket.on("SQL", function (valueArr) {
        google.charts.load('current', {
            packages : ['corechart']
        });
        google.charts.setOnLoadCallback(drawMaterial);
        function drawMaterial() {
            var data = [];
            var Header = ['Call Disposition', 'Answered'];
            data.push(Header);
            for (i in valueArr) {
                var index = 0;
                var foundIndex = false;
                var agent = valueArr[i][1];
                var callcount = valueArr[i][2];
                for (var i in data) {
                    var dataElem = data[i];
                    if (dataElem[0] === agent) {
                        index = i;
                        foundIndex = true;
                        data[index][i] = callcount;
                    }
                }
                if (foundIndex === false) {
                    var chanar = new Array(agent);
                    data.push(chanar);
                }
            }

            console.log(data);

            var options = {
                title : 'Call Disposition',
                hAxis : {
                    title : 'Agents',   
                    minValue : 0,
                },
                vAxis : {
                    title : 'Disposition Number'
                },
                isStacked : true
            };
            var chartdata = new google.visualization.arrayToDataTable(data);
            var material = new google.visualization.ColumnChart(document.getElementById('chart'));
            material.draw(chartdata, options);
        }
    });

它输出以下多维数组:

[['Call Disposition', 'Answered'],['477',277 ]]

我的想法是,最终需要的多维数据数组应该类似于以下格式:(注意,标头可以在代码中更改,只是由于当前正在处理的值的数量而设置):

[['Call Disposition', 'Answered','Busy','Failed'],['477', 728, 48, 277 ],[ '478',88, 24, 56]]
1个回答

2

编辑:这个方法使用一个函数和一个临时变量temp来收集值。每三个项目,一个新的数组被推送到结果数组中。

function x(data) {
    var r = [], temp;
    data.forEach(function (a, i) {
        if (!(i % 3)) {
            temp = [a[1]];
            r.push(temp);
        }
        temp.push(a[2]);
    });
    return r;
}

var data = [['ANSWERED', '477', 728], ['BUSY', '477', 48], ['NO ANSWER', '477', 277], ['ANSWERED', '478', 88], ['BUSY', '478', 24], ['NO ANSWER', '478', 56]],
    result = [['Call Disposition', 'Answered', 'Busy', 'Failed']].concat(x(data));

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');


数组格式必须像您在数据中所布置的那样吗?我现在的布局是[['ANSWERED', '477', 728], ['BUSY', '477', 48], ['NO ANSWER', '477', 277], ['ANSWERED', '478', 88], ['BUSY', '478', 24], ['NO ANSWER', '478', 56]],如何在这种格式下处理呢?因为它们不是单独的MD数组。我在最初的问题中发布了错误的数组。 - Studento919
1
谢谢,这是一个很好的解决方案。 - Studento919

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接