2009-06-04 14 views
7

Ho una matrice indicizzata stringa che vorrei rimuovere un elemento da.Splicing una matrice indicizzata stringa in JavaScript

Si consideri il codice seguente esempio:

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 

Come rimuovo "One" dal secondo esempio come ho fatto nel primo?

+0

possibile duplicato di [Trova tutti i corrispondenti modelli regex e indice della partita nella stringa] (http: // StackOverflow. it/questions/6178335/find-all-matching-regex-patterns-and-index-of-the-match-in-the-string) – Gajus

risposta

20

Il modo corretto per fare questo non è con una matrice, ma un oggetto:

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 
+1

Funziona bene anche con un array: https://jsfiddle.net/6abLj89b/. – Daniel

+0

@Daniel - no, non modifica la matrice. Arr.lunga dopo aver aggiunto il tuo valore e prima di eliminarlo. –

+0

Vedo. Ma allora cosa sta succedendo? https://jsfiddle.net/6abLj89b/1/ – Daniel

4

Una volta che una matrice dispone di chiavi stringa (o numeri che non seguono), diventa un oggetto.

Un oggetto non ha il metodo di giunzione (o non lo stesso di Array). Devi scrivere il tuo, creando un nuovo oggetto e copiandogli la chiave che vuoi conservare.

Ma attenzione! Le chiavi non sono sempre ordinate nello stesso modo in cui sono state aggiunte nell'oggetto! Dipende dal browser.

+0

Non vero: https://jsfiddle.net/ycooo187/. – Daniel

Problemi correlati