Ali Foroughi
Ali Foroughi

Reputation: 4599

Delete from array in javascript

3 hours ago, I asked a question in SO , about deleting a part of an object, so I linked this question to it:

delete a part of object in javascript

but now another problem occurred when I deleted from that array. I use that object to populate a FlexiGrid. but when I delete an item from that object by following code, instead of delete that item , it sets to undefined :( and flexigrid did not accept it for input data.

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

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

        delete Roomdata[i];
        break;

    }
}                

For example, imagine I have 3 items in Roomdata like this :

{item1, item2, item3}

When I call this code to delete item2 , Roomdata object looks like this :

{item1, undefined, item3}

and this is a bad format to be accepted by flexigrid as input data

Is there any solution ?

Thanks every body and sorry about my bad syntax (I am new in English)

regards , Foroughi

Upvotes: 13

Views: 26434

Answers (4)

David R Tribble
David R Tribble

Reputation: 12204

To remove all of the elements of an array matching a particular value, you can do this:

// Remove all elements in arr[] matching val
for (let i = 0;  i < arr.length;  i++) {
    if (arr[i] === val) {
        arr.splice(i--, 1);   // Remove arr[i] and adjust the loop index
    }
}

Note that this is a forward scan of the array. The decrement of the loop index is necessary so that the loop does not skip the next element after an element is removed.

Upvotes: 1

Rob W
Rob W

Reputation: 348972

Walk through the array in reverse order, and use .splice to remove the element.
You have to walk in the reverse order, because otherwise you end up skipping elements See below.

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

What happens if you don't walk in the reverse order:

// 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.

Upvotes: 58

Matt
Matt

Reputation: 75307

What you have is an Array. You should use the splice() method to remove an element from an array, not by deleteing the element.

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

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

        Roomdata.splice(i, 1);
        break;

    }
}  

Upvotes: 4

Kunal Vashist
Kunal Vashist

Reputation: 2471

Using splice in spite of delete.

 Roomdata.splice(i, 0);

splice attribute removes blank string elements, undefined references, NULLs and FALSEs.

it will solve your problem

Upvotes: 3

Related Questions