Когда вы соединяете, просто уменьшайте индекс вашего цикла.
Было много хороших предложений, я выложу код для различных опций, и вы сможете решить, какой использовать
Индекс снижения при сварке
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
самый быстрый. В 10 раз (Chrome), в 20 раз (IE 11) быстрее Array.filter.
Помещение элементов в новый массив также было медленным по сравнению с Array.slice
. Увидеть
http://jsperf.com/clean-undefined-values-from-array2
Я очень удивлен, увидев, что IE возглавил этот процесс, и увидел Chrome за FF и IE. Я не думаю, что когда-либо проводил тест с таким результатом.