var arr = [undefined, 1, undefined, undefined, 6];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === undefined) arr.splice(i, 1); // 刪除後索引位移,導致漏檢
}
// 結果仍殘留 undefined
for (var i = arr.length - 1; i >= 0; i--) {
if (arr[i] === undefined) arr.splice(i, 1);
}
for (var i = 0; i < arr.length; i++) {
if (arr[i] === undefined) { arr.splice(i, 1); i--; }
}
filter(建立新陣列,語意最清晰):
arr = arr.filter(function(v) { return v !== undefined; });
// 或 ES6
arr = arr.filter(v => v !== undefined);
| 方法 | 原地修改 | 效能 | 可讀性 |
|---|---|---|---|
| 反向迴圈 | 是 | O(n) | 中 |
| 遞減索引 | 是 | O(n) | 中 |
| filter | 否(新陣列) | O(n) | 高 |
現代瀏覽器 filter 效能極佳,優先考慮可讀性;若記憶體極度敏感或需保持原陣列引用,用反向迴圈。