чистка массива от undefined со смещением
Цель: проверить все элементы массива, если встречается "undefined", например array[3], то все последующие элементы должны переместиться на одну позицию влево, независимо, будут ли еще встречаться "undefined" и так по кругу, пока все элементы не будут числами, строками и т.п.
Но что-то идет не так... повторная проверка не даёт результатов, а нынешний код не работает так, как нужно. Как мне исправить и может есть более лучшее решение?)
function clearArrayFromUndefined(arr){
if (arr[0] !== undefined) { //проверка на пустой массив
for (var j = 0; j < arr.length; j++) { //перебор свойств массива
var n = arr[j];
if (n === undefined) {
for (var k = (j + 1); k < arr.length; k++) {
arr[k - 1] = arr[k];
delete arr[k];
/*
for(var x = 0; x < arr.length; x++){ //повторный запуск проверки массива на undefined
if (arr[x] === undefined){
j = x;
}
}
*/
}
}
}
}
return arr;
}
var array = [];
array[0] = 0;
array[1] = 1;
array[3] = 3;
array[5] = 5;
array[8] = 8;
array[15] = 15;
array[20] = 20;
//array[50] = 50;
console.log(array);
clearArrayFromUndefined(array);
console.log(array);
|
function clearArrayFromUndefined(){
var i = 0;
do {
if(array[i] === undefined) array.splice(i, 1);
else i++;
} while (i < array.length);
}
var array = [];
array[0] = 0;
array[1] = 1;
array[3] = 3;
array[5] = 5;
array[8] = 8;
array[15] = 15;
array[20] = 20;
//array[50] = 50;
console.log(array);
clearArrayFromUndefined();
console.log(array);
|
Evelate,
function clearArrayFromUndefined(arr){
for (var j = 0; j < arr.length; ) {
var n = arr[j];
if (n === undefined) {
for (var k = j; k < arr.length-1; k++) {
arr[k] = arr[k+1];
}
arr.length--;
}
else j++
}
return arr;
}
var array = [];
array[0] = 0;
array[1] = 1;
array[3] = 3;
array[5] = 5;
array[8] = 8;
array[15] = 15;
array[20] = 20;
//array[50] = 50;
console.log(array);
clearArrayFromUndefined(array);
console.log(array);
|
http://javascript.ru/forum/misc/6854...tml#post450880
только там вместо if (!/^dd/.test(arr[i])) надо написать if (arr[i] !== undefined) |
var arr =[5,5,undefined,6,77,6,4,undefined,57] arr = arr.filter((el) => el !== undefined); console.log(arr); |
| Часовой пояс GMT +3, время: 06:30. |