Bezpieczne usuwanie elementu z tablicy w JavaScript

Posted on

Tak wyglądał mój kod, gdy dotychczas chciałem usunąć element z kolekcji.

elements.splice(array.indexOf(element), 1);

Niestety brakowało sprawdzania czy element rzeczywiście jest w tej tablicy. Czasem powiem wydaje się ze jest, a nie jest 😉 Najprostsza sytuacja, z którą sam się zderzyłem to zamiast elementu miałem idealną kopię elementu (angular.copy() w Angularze). W takim wypadku array.indexOf() zwróci sensowne -1. Bolało będzie za chwilę, gdy wykona się

elements.splice(-1, 1);

Taki kod usunie ostatni element. Ten minus sprawia, że index od którego zaczniemy usuwać będzie obliczany od końca tablicy. W tym przypadku usunięty zostanie ostatni element. Usunięcie niewłaściwego elementu może zamaskować problem. Ja stworzyłem sobie helpera:

function safeRemove(array, element) {
    var index = array.indexOf(element);
    if(index > -1){
        array.splice(index, 1);
    }
}

Przykład kodu, który zreprodukuje problem, który mi się przytrafił

var people = [
    { name: "Pawel" },
    { name: "Gawel" },
];
var person = people[0];

// some code

// in the meanwhile we get a copy
person = { name: person.name };

// some code

people.splice(people.indexOf(person), 1);

console.log(people[0].name); // Pawel 
// but we have deleted Pawel, haven't we?

Inspiracja dla wpisu

Własne błędy & Remove specific element from an array?

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s