views:

559

answers:

2

Gday All,

I have a string indexed array that I would like to remove an item from.

Consider the following example code:

    var arr = new Array();       
    arr[0] = "Zero";
    arr[1] = "One";
    arr[2] = "Two";
    arr.splice(1, 1);

    for (var index in arr)
        document.writeln(arr[index] + " ");

    //This will write: Zero Two

    var arr = new Array();
    arr["Zero"] = "Zero";
    arr["One"] = "One";
    arr["Two"] = "Two";

    arr.splice("One", 1); //This does not work
    arr.splice(1, 1); //Neither does this

    for (var index in arr)
        document.writeln(arr[index] + " ");

    //This will write: Zero One Two

How do I remove "One" from the second example like I did in the first?

Cheers,

Michael

+2  A: 

Once an Array has string keys (or numbers that don't follow), it becomes an Object.

An object doesn't have the splice method (or not the same as Array). You have to write your own, by making a new object and copy into it the key you want to keep.

But be careful ! The keys are not always ordered in the same way they were added in the object ! It depends on the browser.

Fabien Ménager
+5  A: 

The proper way to do this is not with an Array but an object:

var x = {};
x['Zero'] = 'Zero';
x['One'] = 'One';
x['Two'] = 'Two';
console.log(x); //  Object Zero=Zero One=One Two=Two
delete x['One'];
console.log(x); //  Object Zero=Zero Two=Two
Paolo Bergantino