在javascript问题中动态创建对象

在javascript问题中动态创建对象,javascript,jquery,Javascript,Jquery,您好,正在尝试动态创建此阵列。这是静态方式: var pieData = [ { value: 300, color:getRandomColor(), highlight: getRandomColor(), }, { value: 50,

您好,正在尝试动态创建此阵列。这是静态方式:

var pieData = [
                {
                    value: 300,
                    color:getRandomColor(),
                    highlight: getRandomColor(),
                },
                {
                    value: 50,
                    color: getRandomColor(),
                    highlight: "#fac878",
                },
                {
                    value: 100,
                    color: getRandomColor(),
                    highlight: getRandomColor(),
                },
                {
                    value: 120,
                    color: getRandomColor(),
                    highlight: getRandomColor(),
                }

            ];
这就是我所取得的成就:

$.ajax({
        method: "POST",
        url: "getPieChartData"
    })
    .done(function(data){
        obj  = $.parseJSON(data);
        var pieData = []; i = 0;
        $.each(obj, function(key, item) {
            pieData[i].value = item.total + " - " + item.d_name;
            pieData[i].color = getRandomColor();
            pieData[i].highlight = getRandomColor();
            i++;
        });
    });
我从我的函数中得到的值不是问题。我的问题是,我在控制台中看到这部分:

pieData[i].value = item.total +" - " + item.d_name; TypeError: pieData[i] is undefined

我做错了什么?thx

pieData[i].value..
之前,您应该首先有一行:

pieData[i] = {};

pieData[i].value..
之前,应该先有一行:

pieData[i] = {};
您可以使用简单的方法。不需要使用索引器

方法将一个或多个元素添加到数组的末尾,并返回数组的新长度

您可以使用简单的方法。不需要使用索引器

方法将一个或多个元素添加到数组的末尾,并返回数组的新长度


首先需要创建pieData[i]对象

var pieData = []; i = 0;
$.each(obj, function(key, item) {
    pieData[i] = {}; // added line
    pieData[i].value = item.total + " - " + item.d_name;
    pieData[i].color = getRandomColor();
    pieData[i].highlight = getRandomColor();
    i++;
});

首先需要创建pieData[i]对象

var pieData = []; i = 0;
$.each(obj, function(key, item) {
    pieData[i] = {}; // added line
    pieData[i].value = item.total + " - " + item.d_name;
    pieData[i].color = getRandomColor();
    pieData[i].highlight = getRandomColor();
    i++;
});

但是在ajax事件之后如何访问?如果我放了一个控制台日志,它说我是未定义的?@GeorgeMoldovan,AJAX的一个代表异步遍历,它是一个很好的读物,将为您的问题提供解决方案这段代码运行良好,但“推送”并不是问题的解决方案。解决方案是将新对象传递给push,但是您也可以不使用push来实现,就像@jamesnewton在他的回答中所写的那样。但是在ajax事件之后,我如何访问呢?如果我放了一个控制台日志,它说我是未定义的?@GeorgeMoldovan,AJAX的一个代表异步遍历,它是一个很好的读物,将为您的问题提供解决方案这段代码运行良好,但“推送”并不是问题的解决方案。解决方案是将新对象传递给push,但你也可以不用push来完成,就像@jamesnewton在他的回答中所写的那样。