449 Stimmen

Wie man einen bestimmten Wert aus einem Array mit jQuery entfernt

Ich habe ein Array, das wie folgt aussieht: var y = [1, 2, 3];

Ich möchte entfernen 2 von Array y .

Wie kann ich einen bestimmten Wert aus einem Array mit jQuery entfernen? Ich habe versucht pop() aber dabei wird immer das letzte Element entfernt.

4voto

user253780 Punkte 84

Die zweitmeisten upvoted Antwort hier ist auf der engsten Spur möglich zu einem Einzeiler jQuery-Methode des beabsichtigten Verhaltens der OP will, aber sie stolperte am Ende ihrer Code, und es hat einen Fehler. Wenn Ihr Element entfernt werden, ist nicht tatsächlich in das Array, wird das letzte Element entfernt werden.

Einige haben dieses Problem bemerkt, und einige haben Möglichkeiten zum Durchschleifen angeboten, um dies zu verhindern. Ich biete die kürzeste, sauberste Methode an, die ich finden konnte, und ich habe unter ihrer Antwort kommentiert, wie sie ihren Code nach dieser Methode korrigieren können.

var x = [1, 2, "bye", 3, 4];
var y = [1, 2, 3, 4];
var removeItem = "bye";

// Removing an item that exists in array
x.splice( $.inArray(removeItem,x), $.inArray(removeItem,x) ); // This is the one-liner used

// Removing an item that DOESN'T exist in array
y.splice( $.inArray(removeItem,y), $.inArray(removeItem,y) ); // Same usage, different array

// OUTPUT -- both cases are expected to be [1,2,3,4]
alert(x + '\n' + y);

Array x wird das Element "bye" leicht entfernen, und array y wird nicht berührt werden.

Die Verwendung des Arguments $.inArray(removeItem,array) als zweites Argument ist eigentlich die zu spleißende Länge. Da das Element nicht gefunden wurde, ergibt dies den Wert array.splice(-1,-1); was nur dazu führt, dass nichts gespleißt wird... und das alles, ohne eine Schleife dafür schreiben zu müssen.

4voto

andrewb Punkte 5061

Meine Version von user113716's Antwort. Seine entfernt einen Wert, wenn keine Übereinstimmung gefunden wird, was nicht gut ist.

var y = [1, 2, 3]
var removeItem = 2;

var i = $.inArray(removeItem,y)

if (i >= 0){
    y.splice(i, 1);
}

alert(y);

Es wird nun 1 Element entfernt, wenn eine Übereinstimmung gefunden wird, 0, wenn keine Übereinstimmung gefunden wird.

Wie es funktioniert:

  • $.inArray(value, array) ist eine jQuery-Funktion, die den ersten Index eines Arrays findet. value in einem array
  • Die obige Funktion gibt -1 zurück, wenn der Wert nicht gefunden wird. Prüfen Sie also, ob i ein gültiger Index ist, bevor Sie den Wert entfernen. Das Entfernen von Index -1 bedeutet das Entfernen des letzten, was hier nicht hilfreich ist.
  • .splice(index, count) entfernt count Anzahl der Werte ab index Wir wollen also nur eine count de 1

4voto

//in case somebody needs something like this:  multidimensional array (two items)

var ar = [[0,'a'],[1,'b'],[2,'c'],[3,'d'],[4,'e'],[5,'f']];

var removeItem = 3;  

ar = jQuery.grep(ar, function(n) {
  return n[0] != removeItem;   //or n[1] for second item in two item array
});
ar;

3voto

Mahib Punkte 3767

Mit Splice gibt es eine einfache Lösung. Laut W3Schule Die Spleißsyntax ist die folgende;

array.splice(index, howmany, item1, ....., itemX)

Index Erforderlich. Eine Ganzzahl, die angibt, an welcher Position Elemente hinzugefügt/entfernt werden sollen. Verwenden Sie negative Werte, um die Position ab dem Ende des Arrays anzugeben.

wieviele Erforderlich. Die Anzahl der zu entfernenden Objekte. Bei einem Wert von 0 werden keine Elemente entfernt.

Element1, ..., ElementX Optional. Das/die neue(n) Element(e), das/die dem Array hinzugefügt werden soll(en)

Denken Sie daran, dass die folgenden Js ein oder mehrere übereinstimmende Elemente aus dem gegebenen Array entfernen, wenn sie gefunden werden, andernfalls wird das letzte Element des Arrays nicht entfernt.

var x = [1,2,3,4,5,4,4,6,7];
var item = 4;
var startItemIndex = $.inArray(item, x);
var itemsFound = x.filter(function(elem){
                            return elem == item;
                          }).length;

Oder

var itemsFound = $.grep(x, function (elem) {
                              return elem == item;
                           }).length;

Die Endfassung sollte also folgendermaßen aussehen

x.splice( startItemIndex , itemsFound );

Ich hoffe, das hilft.

2voto

Starkers Punkte 9683

Ich würde die Array-Klasse mit einer pick_and_remove() Funktion, etwa so:

var ArrayInstanceExtensions = {
    pick_and_remove: function(index){
        var picked_element = this[index];
        this.splice(index,1);
        return picked_element;
    } 
};
$.extend(Array.prototype, ArrayInstanceExtensions);

Auch wenn es ein wenig langatmig erscheint, können Sie jetzt pick_and_remove() auf jedes beliebige Feld!

Verwendung:

array = [4,5,6]           //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array;                    //=> [4,6]

All das kannst du in einer Pokemon-Aktion sehen hier.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X