1

我正在尝试为图表创建格式。当我尝试这样做时,我会在数据之前得到一个undefinedwith console.log。这是我的代码

$(document).ready(function () {
    var graphData = new Array();
    $.getJSON("ds/js.json", function (Data) {
        dataLength = returnedData.data.length;
        var x = new Array();
        var y = new Array();
        var mytext, dataa, f;
        for (i = 0; i < dataLength; i++) {
            x[i] = Data.data[i].avgPrice;
            y[i] = Data.data[i].numProducts;
        }
        for (var a = 0; a < 6; a++) {
            mytext = "x:" + x[a] + "," + "y:" + y[a] + "}" + "," + "{";
            dataa = dataa + mytext;
        }
        console.log(dataa);
        var f =
            "[{data : [{" + dataa;
        console.log(f);
    });
    drawGraph(graphData);
});

控制台输出:

未定义x:87.6,y:85},{x:116.08,y:61},{x:113.11,y:49},{x:181.37,y:65},{x:138.14,y:74},{ x:66.03,y:89},x:66.03,y:89},{

我在这里做错了什么?而且我还想要一个单独的 a=5 格式,以阻止最后出现的“,{”。

4

3 回答 3

5

当你这样做时:

for  (var a=0;a<6;a++){
    mytext = "x:" +x[a] + "," + "y:" +y[a] + "}" + "," + "{" ;
    dataa=dataa+mytext; 
}   

dataa您正在使用and执行字符串连接mytext。但是,在该for循环的第一次迭代中dataa尚未初始化,其字符串表示为undefined.

当您声明dataa变量时,请将其初始化为空字符串:

var mytext,dataa = '',f;

顺便说一句,重要的是要记住$.getJSON()对数据进行异步请求。如果该调用的结果是drawGraph函数正确执行所必需的,那么您的代码将不会像您预期的那样运行(尽管您在问题中发布的内容没有明确的指示是这种情况)。

$.getJSON()函数会立即执行完毕(在发起请求之后),允许drawGraph执行,但不保证请求一定会收到响应并且returnedData会进行处理;事实上,很有可能不会发生。

于 2013-05-08T14:41:24.667 回答
1

您不应该通过这样的字符串连接来构建对象。我建议实际构建一个对象数组,如下所示:

var dataa = [];
for (var a = 0; a < 6; a++) {
    var newObj = {x: + x[a], y: + y[a]};
    dataa.push(newObj);
}

然后生成f您当前拥有的:

var f = JSON.stringify([{data: dataa}]);
于 2013-05-08T14:44:05.797 回答
0
    dataa = dataa + mytext;
--------------^

这是undefined最初

你需要这样做——

 var mytext, dataa = "", f;
于 2013-05-08T14:43:42.203 回答