我正在对Phonegap应用程序中的数据点进行一些分析。在Android上,这很好用,但是在iOS上,第一次在该数组上使用shift()
后,结果数组的长度停止增加。
function onDataPoint(pct) {
if (rawPct.length > MAX_SAMPLES) {
rawPct.shift();
avgPct.shift();
medPct.shift();
}
rawPct.push(pct);
calcAvg(rawPct.length - 1);
calcMedian(rawPct.length - 1);
}
// Rolling average
function calcAvg(idx) {
var rollGroup = rawPct.slice(Math.max((idx + 1) - ROLL_SIZE, 0), (idx + 1));
var avg = rollGroup.reduce((sum, el) => sum + el, 0) / rollGroup.length;
avgPct[idx] = avg;
}
function calcMedian(idx) {
// Similar to calcAvg
}
在iOS上调用shift()
时,即使我可以从该索引读取正确的值,分配给数组的长度也不再增加。 codepen
一些测试,如果长度不相等,则将条件断点设置为calcMedian(rawPct.length - 1)
:(控制台输入,后接:
,后接输出和我的评论)
rawPct.length: 101
avgPct.length: 100 // should be 101
medPct.length: 100 // correct - not assigned yet
medPct[100]: NaN // seems to have populated ~2x the length with NaN
// Step over calcMedian()
medPct[100]: 81.229 // correct
medPct.length: 100 // should be 101 now
medPct[110] = 555 // testing a bit past the expected end
medPct.length: 100 // should be 111
medPct.push(999): 101 // returns new length
medPct[111]: NaN // the expected position it pushed to
medPct[100]: 999 // where it actually pushed to
medPct.length: 101 // it incremented this time
medPct[101] = 777
medPct.length: 101 // still broken