703 Stimmen

Wie kann ich Objekte aus einem assoziativen JavaScript-Array entfernen?

Angenommen, ich habe diesen Code:

var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;

Wenn ich nun "Nachname" entfernen möchte?....gibt es eine Entsprechung von myArray["lastname"].remove() ?

(Ich brauche das Element nicht, weil die Anzahl der Elemente wichtig ist und ich die Dinge sauber halten möchte).

32 Stimmen

Ein Tipp: Verwechseln Sie nicht Arrays und Maps. Einige Sprachen, wie php, haben ein einziges Objekt für beide. Obwohl Sie hier den richtigen Typ verwendet haben (new Object()), haben Sie es myArray genannt, es ist nur eine Frage der Standards einer Sprache.

0 Stimmen

Vergessen Sie nicht, dass JavaScript typfrei ist und alles ein Objekt ist. Siehe die Antwort von Saul unten.

4 Stimmen

@StephanKristyn - um genau zu sein, hat JS Typen, aber in einer dynamisch et schwach Weise. Zum Beispiel sind die Variablen in der Tat typfrei, ihre Werte jedoch nicht. Das ist die dynamisch Teil. Schwach bedeutet, dass Operationen zwischen verschiedenen Werttypen sind nicht genau definiert und beruhen auf Konvertierungen im Hintergrund; zum Beispiel "Test" + {}; ist eine vollkommen gültige JS-Anweisung.

0voto

Arvind K. Punkte 994

Für "Arrays":

Wenn Sie den Index kennen:

array.splice(index, 1);

Wenn Sie den Wert kennen:

function removeItem(array, value) {
    var index = array.indexOf(value);
    if (index > -1) {
        array.splice(index, 1);
    }
    return array;
}

Die am meisten hochgestimmte Antwort für delete funktioniert gut im Falle von Objekten, aber nicht für echte Arrays. Wenn ich verwende delete Es entfernt Elemente aus Schleifen, behält aber das Element als empty und die Länge des Arrays wird sich nicht ändern. Dies kann in einigen Szenarien ein Problem darstellen.

Zum Beispiel, wenn ich myArray.toString() auf myArray nach dem Entfernen über tun delete wird ein leerer Eintrag erstellt, d. h. ,, .

0voto

T.Todua Punkte 48569

Die einzige funktionierende Methode für mich:

function removeItem (array, value) {
    var i = 0;
    while (i < array.length) {
        if(array[i] === value) {
            array.splice(i, 1);
        } else {
            ++i;
        }
    }
    return array;
}

Verwendung:

var new = removeItem( ["apple","banana", "orange"],  "apple");
// ---> ["banana", "orange"]

0 Stimmen

Warum nicht stattdessen Filter verwenden? Dies ist ein perfekter Anwendungsfall für Filter

-1voto

Lalith kumar Punkte 9
var myArray = newmyArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;

var s = JSON.stringify(myArray);

s.replace(/"lastname[^,}]+,/g, '');
newmyArray = JSON.parse(p);

Ohne Schleifen/Wiederholungen erhalten wir das gleiche Ergebnis.

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