2013-01-27 25 views
16

Eventuali duplicati:
Remove specific element from a javascript array?Togliere valore da array associativo

Sto avendo una matrice, da cui voglio rimuovere un valore.

considerare questo come una matrice

[ 'utils': [ 'util1', 'util2' ] ]

ora voglio solo rimuovere util2. Come posso farlo, ho provato a utilizzare delete ma non ha funzionato.

Qualcuno può aiutarmi?

+2

Il tutore quadrato circostante deve essere una parentesi se questo è un oggetto letterale. – 0x499602D2

+0

Non riesco a vedere un array associativo. – Bergi

risposta

5

utilizzare il metodo splice:

var object = { 'utils': [ 'util1', 'util2' ] } 

object.utils.splice(1, 1); 

Se non si conosce la posizione effettiva dell'elemento della matrice, avresti bisogno di iterare l'array e unire l'elemento da lì. Provate il seguente metodo:

for (var i = object.utils.length; i--;) { 
    var index = object.utils.indexOf('util2'); 

    if (index === -1) break; 

    if (i === index) { 
     object.utils.splice(i, 1); break; 
    } 
} 

Update: la risposta di techfoobar sembra essere più idiomatica del mio. Potresti usare invece il suo.

+0

+1, ci sei quasi: è 'object.utils.splice (1, 1)'. Devi dirlo quanti ne vuoi rimuovere (il secondo '1'). Il primo '1' dice solo a quale indice fare qualcosa. * Modifica: * Sì, ecco qua. :-) –

+0

Cosa succede se l'oggetto è stato definito in questo modo: 'var object = {'utils': ['util2', 'util1']}'? –

+1

Darin voleva dire, e se l'ordine degli elementi fosse diverso. È tutto risposto alla domanda di cui questo è un duplicato. –

0

Penso che non ci sia nulla chiamato array associativo in Javascript. In realtà è un oggetto.

[ 'utils': [ 'util1', 'util2' ] ] 

Per questa riga, non penso che si possa compilare. Dovresti scrivere questo invece.

var obj = { 'utils': [ 'util1', 'util2' ] } 

Quindi per rimuovere l'elemento "util2" nell'array (l'array interno), ci sono 2 modi.

  1. uso pop()

    obj["utils"].pop(); // obj["utils"] is used to access the "property" of the object, not an element in associative array 
    
  2. ridurre la lunghezza

    obj["utils"].length --; 
    
5

È possibile utilizzare Array.splice() in combo con Array.indexOf() per ottenere il comportamento desiderato, senza dover scorrere la matrice:

var toDelete = object.utils.indexOf('util1'); 
if(toDelete != -1) { 
    object.utils.splice(toDelete, 1); 
} 
Problemi correlati