将数组值转换为百分比Javascript

3

我有一个饼图,它引用了一个数组中的值。

我想将这些数组值显示为百分比。我该怎么做?

我用来生成这个饼图的插件是chart.js

参考的Javascript代码:

success : function (data){
    console.log(data);

    var categoryname = ["Drain", "Building", "Pest", "Broken Utilities", 
    "Littering", "Leakage", "Lighting"];
    var category = [];
    var amount = [];

    for (var i in data) { 
        category.push(categoryname[data[i].Category]);
        amount.push (data[i].CaseNum);
    }
    var config = {
        type: 'pie',
        data: {
            datasets: [{
                data: amount,
                backgroundColor: [
                    "rgba(59, 89, 152, 1)",
                    "rgba(59, 89, 152, 1)",
                    "rgba(59, 89, 152, 1)",
                    "rgba(59, 89, 152, 1)",
                    "rgba(59, 89, 152, 1)",
                    "rgba(59, 89, 152, 1)",
                    "rgba(59, 89, 152, 1)"
                    ],
                label: 'Dataset 1'
            }],
                labels: category
        },
        options: {
            responsive: true
        }
    };
    var ctx = $("#mycanvas");       
    var graph = new Chart(ctx, config);
}

Php 参考资料:

$query = "SELECT categoryID as 'Category', COUNT(Case.categoryID) as 'CaseNum' 
FROM `Case` WHERE CaseTime BETWEEN DATE_SUB(now(), INTERVAL 6 MONTH) AND 
now() GROUP BY categoryID ORDER BY categoryID";

$result = $conn->query($query);

$data = array();
foreach ($result as $row) {
    $data[] = $row;
}


$conn->close();

print json_encode($data);

饼图图片示例:饼图图片示例

在“数据:数量”中,“数量”值的格式是什么?小数?整数?您可能需要创建函数助手来创建百分比。 - rachmatsasongko
@rachmatsasongko 它们是整数。 - Zesty
2个回答

0

试试这个

success : function (data){
    console.log(data);

    var integerAmount = [];
    for (var i in data) {
        integerAmount.push(data[i].CaseNum);
    }
    var sum = integerAmount.reduce((a, b) => a + b, 0);
    var categoryname = ["Drain", "Building", "Pest", "Broken Utilities", "Littering", "Leakage", "Lighting"];
    var category = [];
    var amount = [];
    for (var i in data) {
        category.push(categoryname[data[i].Category]);
        amount.push (integerAmount[i]/sum*100+'%');
    }

    // rest of the script
}

这个想法是先从 data 对象中存储整数值。然后求和得到总值。最后,我们将实际的百分比值推送,并将 % 添加到饼图的 amount 数据中。


0
如果您有一个数字数组,只需将该数组简化为总和,并映射每个元素以被总和除即可。
let a = [123,32,22,23,64]
let sum = a.reduce((a,b) => a+b)
let a_percentage = a.map(e => e/sum*100)

你可以按照自己的需求对其进行格式化。


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