我正在尝试为图表创建格式。当我尝试这样做时,我会在数据前收到undefined
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);
});
控制台输出:
undefinedx: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的单独格式,它会停止“,{”到最后。
答案 0 :(得分:5)
执行此操作时:
for (var a=0;a<6;a++){
mytext = "x:" +x[a] + "," + "y:" +y[a] + "}" + "," + "{" ;
dataa=dataa+mytext;
}
您正在使用dataa
和mytext
执行字符串连接。但是,在for
循环的第一次迭代中,dataa
尚未初始化,并且其字符串表示为undefined
。
当您声明dataa
变量时,将其初始化为空字符串:
var mytext,dataa = '',f;
顺便说一句,重要的是要记住$.getJSON()
发出异步数据请求。如果该调用的结果是drawGraph
函数正确执行所必需的,那么您的代码将不会像您预期的那样起作用(尽管您在问题中发布的内容没有确切的指示,这是情况)。
$.getJSON()
函数将立即执行(在启动请求后),允许drawGraph
执行,但不能保证请求将收到响应并处理{{1}将会发生;事实上,这种可能性很小,不会发生。
答案 1 :(得分: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}]);
答案 2 :(得分:0)
dataa = dataa + mytext;
--------------^
最初是undefined
你需要这样做 -
var mytext, dataa = "", f;