iOS上的shift()防止分配增加数组长度

时间:2019-01-19 01:19:54

标签: javascript ios arrays

我正在对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

0 个答案:

没有答案