2012-06-23 4 views
17

W jQuery/JavaScript, Jak usunąć element tablicy?W jquery w jaki sposób usunąć element tablicy przez index ["klucz"] lub wartość

coś takiego:

array.remove(array["key"]); 

// or 

array.remove("value") 
+1

Element tablicy lub obiekt własność ct? –

+1

Niezależnie od tego, czy pytasz o tablicę, czy po prostu zwykły obiekt, to zostało to wiele razy omówione na StackOverflow. Obecnie nie mogę stwierdzić, czy chcesz usunąć właściwość, usunąć element Array według indeksu lub usunąć element Array według wartości. NARQ IMO. –

Odpowiedz

19

Sądząc po kodzie, to brzmi jak chcesz usunąć majątkowych obiektu, który chcesz zrobić z delete:

var obj = { key: "value" }; 

delete obj["key"]; 

bardzo przydatny przewodnik na pracę z obiektami w JavaScript można znaleźć na MDN.

+0

delete pozostawi pustą wartość, nadal będziesz musiał przeładować obiekt, chociaż otrzymasz pusty indeks, który usunąłeś – user889030

2

array["key"] nie jest kluczem do tablicy (nie ma tablic asocjacyjnych w javascript, jeśli pochodzisz z PHP mogą one wyglądać jak one, ale są obiektami), ale właściwość obiektu, myślę, że możesz użyć delete

delete array.key 
+3

'tablica [" klucz "] === array.key' – Eric

+0

chociaż array [x] (używając zmiennej w" X ") to nie to samo co array.x –

6
var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
fruits.splice(2, 1); 

usunie 1 pozycję tablicy z owoców, w pozycji 2, który jest Apple

23

Dla tablice użyciu metody splice:

var array = [1, 2, 3, 4, 5]; 
array.splice(2, 1); 
console.log(array); // [1, 2, 4, 5] 

Można zrobić własną funkcję, aby usunąć (pierwsze wystąpienie) pewnego elementu w tablicy:

Array.prototype.remove = function(el) { 
    return this.splice(this.indexOf(el), 1); 
} 
var arr = [1, 2, 3, 4, 5]; 
arr.remove(4); 
console.log(arr); // [1, 2, 3, 5] 

Jeśli chcesz usunąć element z obiektu, użyj delete składnia:

var a = {key1: 'val1', key2: 'val2'}; 
delete a.key1; 
console.log(a); // {key2: 'val2'} 

I znowu można zrobić własną funkcję obsługi to:

Object.prototype.remove = function(el) { 
    if (this.hasOwnProperty(el)) { 
     delete this[el]; 
    } 
    return this; 
} 
var a = {key1 : 'val1', key2: 'val2'}; 
a.remove('key1'); 
console.log(a); // {key2: 'val2'} 

Aktualizacja:

  1. Chociaż to był tylko przykład, jak @Eric wskazał, że nie jest to bardzo dobry pomysł, aby zmodyfikować prototyp obiektu. Ponownie napisałem przykłady, które nie zmieniają stanu obiektu.
  2. Dodano sprawdzanie, czy element istnieje w tablicy. Jeśli nie istnieje, wznowiony indeks będzie wynosił -1, a metoda splotu usunie ostatni element (pierwszy element z końca tablicy). Dzięki, @amnotiam!


function remove(collection, key) { 
    // if the collections is an array 
    if(collection instanceof Array) { 
     if(collection.indexOf(key) != -1) { 
      collection.splice(collection.indexOf(key), 1); 
     } 
    } 
    // it's an object 
    else if(collection.hasOwnProperty(key)) { 
     delete collection[key]; 
    } 
    return collection; 
}; 

I oczywiście, ponieważ pytanie zostało oznaczone jquery, możemy dodać tę funkcję jako plugin jquery:

(function($, global, undefined) { 
    $.removeElementFromCollection = function(collection,key) { 
     // if the collections is an array 
     if(collection instanceof Array) { 
      // use jquery's `inArray` method because ie8 
      // doesn't support the `indexOf` method 
      if($.inArray(key, collection) != -1) { 
       collection.splice($.inArray(key, collection), 1); 
      } 
     } 
     // it's an object 
     else if(collection.hasOwnProperty(key)) { 
      delete collection[key]; 
     } 

     return collection; 
    }; 
})(jQuery, window); 

a następnie używać go tak:

var array = [1, 2, 3, 4, 5]; 
$.removeElementFromCollection(array, 2); // [1, 3, 4, 5] 

var object = {1: 2, 3: 4}; 
$.removeElementFromCollection(object, 1); // {3: 4} 
+3

Ponieważ ta odpowiedź obejmuje wszystkie możliwe warianty (tablica/obiekt + klucz/wartość), możemy upiększyć pytanie, a następnie połączyć każde pytanie" usuń "tutaj jako duplikaty? –

+0

To był przykład. możesz wywnioskować, jakie są argumenty według faktycznego wyniku, lub możesz przeczytać link do postetu do dokumentacji metody łączenia. Pierwszym argumentem jest indeks od miejsca, w którym chcesz usunąć elementy, a drugi to liczba elementów, które chcesz usunąć. –

+3

'Object.prototype.remove = ...' - ** Nie rób tego! **. Co się stanie, jeśli mój obiekt to '{add: 'val1', remove: 'val2'}'? – Eric

Powiązane problemy