Удалить из массива в javascript

3 часа назад я задал вопрос в SO, об удалении части объекта, поэтому я связал этот вопрос с ним:

удалить часть объекта в javascript

но теперь возникла другая проблема, когда я удалился из этого массива. Я использую этот объект для заполнения FlexiGrid. но когда я удаляю элемент из этого объекта, следуя коду, вместо удаления этого элемента он устанавливает значение undefined:( и flexigrid не принимает его для входных данных.

for (var i = 0; i < Roomdata.length; i++) {

    if(Roomdata[i].id = X) {

        delete Roomdata[i];
        break;

    }
}                

Например, представьте, что у меня есть 3 элемента в Roomdata:

{item1, item2, item3}

Когда я вызываю этот код для удаления item2, объект Roomdata выглядит следующим образом:

{item1, undefined, item3}

и это плохой формат, который должен быть принят flexigrid в качестве входных данных

Есть ли какое-либо решение?

Спасибо каждому телу и жалею о моем сильном синтаксисе (я новичок на английском языке)

Foroughi

Ответы

Ответ 1

Пройдите через массив в обратном порядке и используйте .splice, чтобы удалить элемент.
Вы должны ходить в обратном порядке, потому что иначе вы в конечном итоге пропускаете элементы См. Ниже.

for (var i = Roomdata.length-1; i >= 0; i--) {
    if (Roomdata[i].id == X) {
        Roomdata.splice(i, 1);
        break;
    }
}

Что произойдет, если вы не будете ходить в обратном порядке:

// This happens in a for(;;) loop:
// Variable init:
var array = [1, 2, 3];
var i = 0;

array.splice(i, 1); // array = [2, 3]   array.length = 2
// i < 2, so continue
i++;  // i = 1    

array.splice(i, 1); // i=1, so removes item at place 1: array = [2]
// i < 1 is false, so stop.

// array = [2]. You have skipped one element.

Ответ 2

У вас есть Массив. Вы должны использовать метод splice() для удаления элемента из массива, а не с помощью delete элемента.

for (var i = 0; i < Roomdata.length; i++) {

    if(Roomdata[i].id = X) {

        Roomdata.splice(i, 1);
        break;

    }
}  

Ответ 3

Использование сплайсинга, несмотря на удаление.

 Roomdata.splice(i, 0);

атрибут splice удаляет элементы пустой строки, undefined ссылки, NULL и FALSE.

он решит вашу проблему