Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   чистка массива от undefined со смещением (https://javascript.ru/forum/dom-window/69820-chistka-massiva-ot-undefined-so-smeshheniem.html)

Evelate 20.07.2017 10:10

чистка массива от 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);

Dilettante_Pro 20.07.2017 10:40

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);

рони 20.07.2017 11:07

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);

Alexandroppolus 20.07.2017 11:13

http://javascript.ru/forum/misc/6854...tml#post450880

только там вместо if (!/^dd/.test(arr[i])) надо написать if (arr[i] !==
undefined)

j0hnik 20.07.2017 15:23

var arr =[5,5,undefined,6,77,6,4,undefined,57]
arr = arr.filter((el) => el !== undefined);
console.log(arr);


Часовой пояс GMT +3, время: 03:54.