JavaScript for 循环只返回数组中的最后一项

JavaScript for loop returns last item in array only

本文关键字:最后 一项 循环 for 返回 数组 JavaScript      更新时间:2023-09-26

我在下面有以下函数,其中有两个 for 循环遍历 JSON 文件。我遇到的问题是在barFactory函数中调用的第二个循环中,它只返回数组中的最后一项。我如何解决这个问题,我正在调用图表对象以在每次迭代中创建,因此它不应该根据我的逻辑发生。

var looper = function(sec0, vz, lOrR) {
    $('#' + lOrR + 'Title').text(sec0);
    for (var i = 0; i < vz[0]['Areas'].length; i++) {
        var tText = Object.keys(vz[0]['Areas'][i]);
        var root = vz[0]['Areas'][i][tText][0];
        barFactory(root, sec0, lOrR, i, tText);
    }
    function barFactory(sec1, sec0, lOrR, i, tText) {
        var dataName;
        for (var j = 0; j < sec1[sec0].length; j++) {
            charts.title.text = sec1[sec0][j]["Label"];
            dataName = sec1[sec0][j]['Metrics'][5]['Rep Res. %'].slice(0, -1);
            charts.series[0].name = dataName;
            charts.series[0].data = [parseFloat(dataName)];
            chart = new Highcharts.Chart(charts);
        }
    }
}

有几件事:- 正如芭芭拉所说,我们没有看到您正在更改 renderTo 参数- 您使用相同的对象创建图表,这可能会导致一些错误

我的建议是:

var dataName = dataName = sec1[sec0][j]['Metrics'][5]['Rep Res. %'].slice(0, -1);
chart = new Highcharts.Chart(
    Highcharts.merge(charts, {
        chart: { 
           renderTo: new_container_variable
        },
        title: {
           text: sec1[sec0][j]["Label"]
        }, 
        series: [{
            data: [parseFloat(dataName)],
            name: dataName
        }] 
    })
 );

另外,您确定:dataName = sec1[sec0][j]['Metrics'][5]['Rep Res. %'].slice(0, -1); - sec1之后的路径是正确的吗?尝试console.log(dataName);以确保您传递正确的值,而Highcharts会出错。