当你拼接时,只需减少你的循环索引。
有很多好的建议,我将发布不同选项的代码,您可以决定使用哪个
拼接时递减索引
http://jsfiddle.net/mendesjuan/aFvVh/
var undef;
var arr = [1,2, undef, 3, 4, undef];
for (var i=0; i < arr.length; i++) {
if ( arr[i] === undef ) {
arr.splice(i,1);
i--;
}
}
向后循环 http://jsfiddle.net/mendesjuan/aFvVh/1/
var undef;
var arr = [1,2, undef, 3, 4, undef];
for (var i=arr.length - 1; i >=0; i--) {
if ( arr[i] === undef ) {
arr.splice(i,1);
}
}
复制到新数组 http://jsfiddle.net/mendesjuan/aFvVh/2/
var undef;
var arr = [1,2, undef, 3, 4, undef];
var temp = [];
for (var i=0; i < arr.length; i++) {
if ( arr[i] !== undef ) {
temp.push(arr[i])
}
}
arr = temp;
使用过滤器,这只是创建新数组的一种奇特方式
var undef;
var arr = [1,2, undef, 3, 4, undef];
arr = arr.filter(function(item){
return item !== undef;
});
在所有这些示例的末尾,arr 将是 [1,2,3,4]
性能
IE 11、FF 和 Chrome 一致认为 Array.splice 是最快的。与Array.filter. 相比,速度是Array.filter. 的10 倍(Chrome),20 倍(IE 11) 与Array.slice 相比,将项目放入新数组也很慢。看
http://jsperf.com/clean-undefined-values-from-array2
看到 IE 在这方面领先,并且看到 Chrome 落后于 FF 和 IE,我真的很惊讶。我想我从来没有用这个结果进行过测试。