我知道这里发布的JavaScript Array.push()方法存在一些问题,但我无法使用以下示例:
首先,我得到了一个全局数组:
var results = new Array();
for (var i = 0; i < X.length; i++) {
results[i] = new Array();
}
现在应该在按钮事件上填充此数组。我想要的只是用新阵列填充数组并将一些数据推送给它们。以下代码应检查results[x][y]
是否已经是一个数组(如果不是则创建一个数组)并将数据推送到它。
所以,最后,应该有一个包含X.length数组的数组(结果),这些数组填充了未知数量的新数组,每个数组包含未知数量的数据:
function pushResult(result) {
if (typeof results[currentStim][currentDist] == 'undefined') {
results[currentStim][currentDist] = new Array();
}
results[currentStim][currentDist].push(result);
}
问题是:它不起作用。我确保currentStim
永远不会超出范围,我确保只在需要时才访问“if”-Statement(因此不会用新的数据覆盖数组)并且我看了返回值push()
,总是抛出一个代表新数组长度的数字。正如预期的那样,这个数字会延迟一个值被推送到数组。
然而,当我最后打电话时:
document.getElementById('results').value = JSON.stringify(results);
将results
传递给我的PHP脚本,会传递这样的内容:
[[],[[1]],[],[]]
push()
被称为MUCH的频率超过一次(至少“1”是我想要存储的结果之一),如上所述,总是返回一个递增的arrayLength。这是如何运作的?我的数据怎么了?
我在Chrome和Firefox上测试了这个,结果相同。可能有趣的是,单独的循环同时绘制到Canvas,但是不应该插入Array-Handling和onKey-Events,对吗?
希望你能帮助我,
MA3o
编辑:
像这样调用pushResult: // Handles Space-Events
function pushed(event) {
if (event.which == 32 && stimAlive) {
pushResult(1);
hitCurrent = true;
}
其中hitCurrent和stimAlive只是在其他地方设置的标志。一些代码进一步将函数pushed
注册为事件监听器:
document.onkeydown = function(event) { pushed(event)}
正确调用所有函数。就我所见,将console.log(结果)添加到每个循环只显示正确的数组。
根据评论,问题可能是“currentDist”可以是浮点值。