Javascript Object push () Funktion

100

Ich habe ein Javascript-Objekt (ich erhalte die Daten tatsächlich über eine Ajax-Anfrage):

var data = {};

Ich habe ein paar Sachen hinzugefügt:

data[0] = { "ID": "1"; "Status": "Valid" }
data[1] = { "ID": "2"; "Status": "Invalid" }

Jetzt möchte ich alle Objekte mit einem ungültigen Status entfernen (aber alles in der Reihenfolge beibehalten):

var tempData = {};
for ( var index in data ) {
    if ( data[index].Status == "Valid" ) {
        tempData.push( data );
    }
}
data = tempData;

In meinen Augen sollte dies alles funktionieren, aber ich erhalte einen Fehler, der tempData.pushkeine Funktion ist. Ich verstehe, warum es nicht dasselbe ist wie ein Array, aber was könnte ich sonst tun?

Andrew Jackman
quelle
4
Es sieht so aus, als ob Sie nur ein Array verwenden sollten
Esailija

Antworten:

131

push()ist für Arrays , nicht für Objekte , verwenden Sie also die richtige Datenstruktur.

var data = [];
// ...
data[0] = { "ID": "1", "Status": "Valid" };
data[1] = { "ID": "2", "Status": "Invalid" };
// ...
var tempData = [];
for ( var index=0; index<data.length; index++ ) {
    if ( data[index].Status == "Valid" ) {
        tempData.push( data );
    }
}
data = tempData;
Matt Ball
quelle
9
+1 hat mich geschlagen. Vergessen Sie nicht, auch die for...inSchleife zu ändern .
Andy E
@ MattBall mein schlechtes! Ich bin nicht wirklich so geschickt in SO Bewertung und so! :)
Shouvik
1
Push ist für Array. Gibt es eine Möglichkeit, einem Objekt ein Array hinzuzufügen?
Venkat
1
Was ist mit assoziativem Array?
Kinnard Hockenhull
@KinnardHockenhull Es tut mir leid, ich verstehe die Frage nicht. Können Sie klarstellen, was Sie fragen?
Matt Ball
17

Objekte unterstützen keine Push-Eigenschaft, aber Sie können sie auch mit dem Index als Schlüssel speichern.

var tempData = {};
for ( var index in data ) {
  if ( data[index].Status == "Valid" ) { 
    tempData[index] = data; 
  } 
 }
data = tempData;

Ich denke, dies ist einfacher, wenn Sie das Objekt entfernen, wenn sein Status ungültig ist.

for(var index in data){
  if(data[index].Status == "Invalid"){ 
    delete data[index]; 
  } 
}

Und schließlich müssen Sie keine var temp erstellen -

csantana
quelle
Fügen Sie eine Erklärung mit Antwort hinzu, wie diese Antwort OP bei der Behebung des aktuellen Problems
hilft
5

Du musst machen var tempData = new Array();

Push ist eine Array-Funktion.

Alex Dn
quelle
9
Warum new Array()und nicht []?
Matt Ball
3
[] ist eine Alternative (Verknüpfung) zum Erstellen eines neuen Arrays. Es kann mit [] und mit new Array () erstellt werden.
Alex Dn
6
[]ist die primäre Methode zum Erstellen von Arrays, die anderen sind Alternativen und können sogar überschrieben werden.
Esailija
6
Siehe stackoverflow.com/questions/885156/… für eine Diskussion darüber, warum new Array()böse ist
Jonas Høgh
w3schools.com/js/js_obj_array.asp neues Array ist ein reguläres Array. Wo [] als primär definiert?
Alex Dn
3

Die Programmiersprache Javascript unterstützt das funktionale Programmierparadigma, sodass Sie mit diesen Codes problemlos arbeiten können.

var data = [
    {"Id": "1", "Status": "Valid"},
    {"Id": "2", "Status": "Invalid"}
];
var isValid = function(data){
    return data.Status === "Valid";
};
var valids = data.filter(isValid);
Regex
quelle
2

Ich gehe davon aus, dass Sie WIRKLICH ein Objekt vom Server erhalten und ein Objekt bei der Ausgabe erhalten möchten

Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])

Kamil Kiełczewski
quelle
0
    tempData.push( data[index] );

Ich bin mit der richtigen Antwort oben einverstanden, aber ... Sie geben immer noch nicht den Indexwert für die Daten an, die Sie zu tempData hinzufügen möchten. Ohne den Wert [index] wird das gesamte Array hinzugefügt.

user3094826
quelle
Bitte beschreiben Sie ausführlich, wie Sie das Problem lösen können. Vielen Dank.
Leonid Glanz
Dies wäre, um die akzeptierte Antwort von Matt Ball zu korrigieren. Während wir Daten durchlaufen, sollten wir nur Daten [Index] pushen, nicht Daten vollständig.
Jonathan Bergeron
-2

Machen :


var data = new Array();
var tempData = new Array();

Sudhir Bastakoti
quelle
4
Warum new Array()und nicht []?
Matt Ball
Beachten Sie den Unterschied zwischen new Array (); und neues Array; Sie sollten in der Lage sein, solche Fragen zu beantworten, anstatt über Alternativen zu erzählen.
Jonathan