JavaScript数组长度不正确

时间:2016-01-05 20:19:48

标签: javascript arrays

我有一个名为' plotData'的数据数组。它包含任意数量的行'数据,只是4元素数组。数组' plotData'附加到代码中使用$ .post()脚本几行。 ' ...'是加载post请求中显示的一些变量的地方。

console.log("plotData (before update): ", plotData);
console.log("plotData length: ", plotData.length);

...
...
...

$.post(
    "/csvgen",
    {node_num: nodes.toString(), start_time: startTime.toString(), end_time: endTime.toString()},
    function(data){
        var nodeData = $.csv.toArrays(data);

        nodeData.forEach(function(element){
            plotData.push(element);
        });
    },
    "text"
);

我在控制台中记录数组和array.length,认为这两个方法调用应该按顺序执行。当我查看控制台输出时,数组的控制台日志显示有28个条目,但plotData.length的控制台日志是14.随着数组的追加,事实证明plotData的实际长度是总是比plotData.length控制台输出大14。

' plotData'数组在此代码之外读取,但未修改。

这是什么原因?

编辑以添加日志

Can't plot empty data set
TypeError: Cannot read property 'length' of undefined(…)
plotData (before update):  []
plotData length:  0
plotData (before update):  [Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4]]
plotData length:  14
plotData (before update):  [Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4]]
plotData length:  28
plotData (before update):  [Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4], Array[4]]
plotData length:  50

第一个错误是b / c,当我实例化我的情节时,数据集是空的。

3 个答案:

答案 0 :(得分:1)

您的代码在调用post()之前记录。尝试将日志记录语句添加到回调函数的末尾 - 它们应显示“正确”值(在追加新行之后)。

答案 1 :(得分:1)

问题在于我正在使用的调试器(Chrome),而不在代码本身。代码的行为符合预期。

" console.log()"函数会记录单个值,但是在记录数组时,不会记录任何值。调试器只是给自己做一个说明"嘿,那个数组已经记录在那里"。因此,当用户从日志中打开数组时,日志会根据日志打开时的内容动态生成数组。

因此,要将此信息与症状相关联,请正确记录数组的实际长度,但会记录指向该数组的指针。当用户到达断点时,显示的post请求已经返回,将数据添加到' plotData'阵列。这使得它在停止时显示出plotData.length和实际长度不同。

这个答案应归功于alexdmejias(见问题评论)。谢谢!

答案 2 :(得分:0)

您需要记录回调内的长度。无论何时收到响应,您在post函数内写入的回调都会启动,但是您在响应之前尝试记录长度(因此尚未调用回调)并且未正确设置数组。

也许请阅读documentation