2009-06-04 8 views
7

Tengo una matriz indexada de cadena de la que me gustaría eliminar un elemento.Empalme de una matriz indexada de cadena en JavaScript

considere el siguiente código ejemplo:

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 

¿Cómo se quita "One" de la segunda ejemplo como lo hice en la primera?

+0

posible duplicado de [Buscar todos los patrones de expresiones regulares a juego y el índice de coincidencia en la cadena] (http: // stackoverflow. com/questions/6178335/find-all-matching-regex-patterns-and-index-of-the-match-in-the-string) – Gajus

Respuesta

20

La forma correcta de hacer esto no es con una matriz sino un objeto:

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

Funciona bien con una matriz también: https://jsfiddle.net/6abLj89b/. – Daniel

+0

@Daniel: no, no modifica la matriz. Haga arr.length después de agregar su valor y antes de eliminarlo. –

+0

Ya veo. Pero entonces, ¿qué está pasando? https://jsfiddle.net/6abLj89b/1/ – Daniel

4

Una vez que una matriz tiene claves de cadena (o números que no siguen), se convierte en un objeto.

Un objeto no tiene el método de empalme (o no es lo mismo que Array). Tienes que escribir el tuyo, creando un nuevo objeto y copiando la clave que deseas conservar.

¡Pero ten cuidado! ¡Las claves no siempre se ordenan de la misma manera que se agregaron en el objeto! Depende del navegador.

+0

No es verdad: https://jsfiddle.net/ycooo187/. – Daniel

Cuestiones relacionadas