【问题标题】:Getting data from a Javascript Object Array in Node js?从 Node js 中的 Javascript 对象数组获取数据?
【发布时间】:2017-06-24 07:12:00
【问题描述】:

我正在尝试从 JS 对象数组中解析数据并通过传递字段名称来获取值,然后将数据保存在数组中。但由于某种原因,我没有得到正确的结果。这是我到目前为止所尝试的。我尝试记录我在 val 中得到的结果,这就是我得到的结果。

val:Array[6]
0
:
Object
BankName
:
"IM BANK"
MERCHANTNAME
:
"MPesa"
NO_OF_FAILED_BANK_TRANSACTIONS
:
0
NO_OF_FAILED_SERVICE_TRANSACTIONS
:
2
NO_OF_SUCCESSFUL_TRANSACTIONS
:
28
__proto__
:
Object
1
:
Object
2
:
Object
3
:
Object
4
:
Object
5
:
Object
length
:
6

How Do I parse the data from my val array by passing field names and then store inside my merchantname array etc.

    Homepage.js
<html>
<head>

    <script src="http://code.jquery.com/jquery-1.11.3.min.js" ></script>
    <script src="http://code.highcharts.com/highcharts.js" ></script>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>


</head>
<body>
<div id="container1" style="width:100%; height:400px;"></div>
<div id ="container2" style="height:20px;"></div>
<div id ="container3" style="width:100%; height:400px;"></div>
<script type="text/javascript">

        $(document).ready(function () {
            var bankid = [ 57, 9912, 9905, 16, 58 ];
            var country = ["KENYA", "KENYA", "KENYA", "UGANDA", "UGANDA"];
            var counter = 0;
            var merchantname = [];
            var successtranscs = [];
            var failedtranscs = [];
            var servicetranscs = [];
            var bankname;
            var rows =<%-JSON.stringify(Resultset)%>

                function initfunc() {
                    $.ajax({
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        url: "/dashboard",
                        data: JSON.stringify({country: country[counter], bankid: bankid[counter]}),
                        dataType: "json",
                        success: function (Result) {
                            Result = Result.Resultset
                          // console.log("result", Result);


                            //  console.log("result",Result);
                            var data = [];
                            var merchantname = [];
                            var successtranscs = [];
                            var failedtranscs = [];
                            var servicetranscs = [];
                            var bankname;

                            $.each(Result, function(item, value){
                                console.log("val",value);
                                for (var i in value) {

                                     $.each(value[i], function(item, val){
                                        console.log(val);
                                        for(var i =0;i<val.length;i++)
                                        {
                                            merchantname.push(val[i].merchant_name);
                                            successtranscs.push(val[i].success_transcs);
                                            failedtranscs.push(val[i].failed_transcs);
                                            servicetranscs.push(val[i].service_transcs);
                                            bankname =val[i].bankname;
                                            console.log("merchantname",merchantname);
                                        }


//
                                   })
                                }
                            })
                           // merchantname.push(Result[i].merchant_name);
//                                    successtranscs.push(Result[i].success_transcs);
//                                    failedtranscs.push(Result[i].failed_transcs);
//                                    servicetranscs.push(Result[i].service_transcs);
//                                    bankname = Result[i].bankname;

                         //   console.log("merchantname",merchantname);
                            StackedChart(bankname, merchantname, successtranscs, failedtranscs, servicetranscs);
                            merchantname = [];
                            successtranscs = [];
                            failedtranscs = [];
                            servicetranscs = [];
                            if (counter == country.length - 1) {
                                counter = -1;
                                counter++;
                            }
                            else {
                                counter++;
                            }
                        },
                        error: function (Result) {
                            console.log(Result);
                        }
                    });


            }
            initfunc();

            function StackedChart(bank_name,merch_name, succ_val, fail_val, ser_val) {

                var myChart = Highcharts.chart('container1', {
                    chart: {
                        type: 'column'
                    },
                    title: {
                        text: bank_name
                    },
                    xAxis: {
                        categories: merch_name
                    },
                    yAxis: {
                        min: 0,
                        title: {
                            text: 'TransactionStatus'
                        },
                        stackLabels: {
                            enabled: true,
                            style: {
                                fontWeight: 'bold',
                                color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray'
                            }
                        }
                    },
                    legend: {
                        align: 'right',
                        x: -30,
                        verticalAlign: 'top',
                        y: 25,
                        floating: true,
                        backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || 'white',
                        borderColor: '#CCC',
                        borderWidth: 1,
                        shadow: false
                    },
                    tooltip: {
                        headerFormat: '<b>{point.x}</b><br/>',
                        pointFormat: '{series.name}: {point.y}<br/>Total: {point.stackTotal}'
                    },
                    plotOptions: {
                        column: {
                            stacking: 'normal',
                            dataLabels: {
                                enabled: true,
                                color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white'
                            }
                        }
                    },
                    series: [{
                        name: 'Servicefailure',
                        data: ser_val
                    }, {
                        name: 'Failure',
                        data: fail_val
                    }, {
                        name: 'Success',
                        data: succ_val
                    }]
                });
            }




            setInterval(initfunc, 2000);
        });



</script>


</body>
</html>

【问题讨论】:

    标签: javascript jquery arrays node.js


    【解决方案1】:

    initfunc() 中的嵌套循环看起来都错了。

    1. 回调签名

    $.each()的回调签名是(item, index)

    1. 嵌套

    您是否意识到$.each(function() {...}) 本身就是一个循环结构,不需要for 循环?

    你有嵌套在 4 层的循环。总结:

    $.each(...,  { // outer loop (n1 iterations)
        for(...) { // first inner loop (n2 iterations)
            $.each(..., function(element2, index2) { // second inner loop (n3 iterations)
                for() { // third inner loop (n4 iterations)
                    // Here, inner statements are called n1 x n2 x n3 x n4 times
                }
           });
        }
    });
    

    这不一定是错误的,但是需要嵌套那么深的循环是非常不寻常的。

    我宁愿想象你想要:

    $.each(Result, function(item) {
        $.each(item, function(val) {
            merchantname.push(val.merchant_name); // or .MERCHANTNAME?
            successtranscs.push(val.success_transcs); // or .NO_OF_SUCCESSFUL_TRANSACTIONS?
            failedtranscs.push(val.failed_transcs); // or .NO_OF_FAILED_BANK_TRANSACTIONS?
            servicetranscs.push(val.service_transcs); // or .NO_OF_FAILED_SERVICE_TRANSACTIONS?
            bankname = val.bankname; // or .BankName?
       });
    });
    

    或者只是:

    $.each(Result, function(val) {
        merchantname.push(val.merchant_name); // or .MERCHANTNAME?
        successtranscs.push(val.success_transcs); // or .NO_OF_SUCCESSFUL_TRANSACTIONS?
        failedtranscs.push(val.failed_transcs); // or .NO_OF_FAILED_BANK_TRANSACTIONS?
        servicetranscs.push(val.service_transcs); // or .NO_OF_FAILED_SERVICE_TRANSACTIONS?
        bankname = val.bankname; // or .BankName?
    });
    

    【讨论】:

      【解决方案2】:

      您的访问键(marchant_name、success_transcs、..)与数组中对象的键(MERCHANTNAME、NO_OF_FAILED_BANK_TRANSACTIONS、...)不同。

      尝试使用完全相同的键:

      ...
      merchantname.push(val[i].MERCHANTNAME);
      successtranscs.push(val[i].NO_OF_SUCCESSFUL_TRANSACTIONS);
      ...
      

      【讨论】:

        猜你喜欢
        • 2021-07-10
        • 2015-11-19
        • 2019-10-15
        • 2017-08-06
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        相关资源
        最近更新 更多