2013-01-27 20 views
16

Powiel możliwe:
Remove specific element from a javascript array?usunąć wartości z tablicy asocjacyjnej

Mam tablicę, z której chcesz usunąć wartość.

Potraktuj to jako tablica

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

Teraz po prostu chcesz usunąć util2. Jak mogę to zrobić, próbowałem używać delete, ale to nie zadziałało.

Czy ktoś może mi pomóc?

+2

Otaczający kwadratowy nawias klamrowy powinien być klamrą, jeśli jest to literał obiektowy. – 0x499602D2

+0

Nie widzę tablicy asocjacyjnej. – Bergi

Odpowiedz

5

Użyj metody splice:

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

object.utils.splice(1, 1); 

Jeśli nie znają rzeczywiste położenie elementu tablicy, którą trzeba iteracyjne nad tablicy i splatać element stamtąd. Wypróbuj następującą metodę:

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; 
    } 
} 

Aktualizacja: odpowiedź techfoobara wydaje się być bardziej idiomatyczna niż moja. Rozważ użycie zamiast tego jego.

+0

+1, jesteś prawie na miejscu: To jest 'object.utils.splice (1, 1)'. Musisz powiedzieć, ile trzeba usunąć (drugi "1"). Pierwsze '1' po prostu mówi, w jakim indeksie coś zrobić. * Edycja: * Tak, masz. :-) –

+0

Co jeśli obiekt został zdefiniowany w następujący sposób: 'var object = {'utils': ['util2', 'util1']}'? –

+1

Darin chciał powiedzieć, co jeśli kolejność elementów jest inna. Na to pytanie odpowiada pytanie, które jest duplikatem. –

0

Myślę, że nie ma czegoś takiego jak tablica asocjacyjna w JavaScript. To jest właściwie obiekt.

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

W przypadku tej linii nie sądzę, że by się skompilowała. Zamiast tego powinieneś to napisać.

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

Aby usunąć element "util2" z tablicy (tablica wewnętrzna), istnieją 2 sposoby.

  1. stosowanie pop()

    obj["utils"].pop(); // obj["utils"] is used to access the "property" of the object, not an element in associative array 
    
  2. zmniejszyć długość

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

Można użyć Array.splice() w combo z Array.indexOf() aby uzyskać pożądane zachowanie bez pętli tablica:

var toDelete = object.utils.indexOf('util1'); 
if(toDelete != -1) { 
    object.utils.splice(toDelete, 1); 
} 
Powiązane problemy