Ich habe ein Javascript-Objekt (ich bekomme die Daten tatsächlich durch 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 bei der Bestellung gleich bleiben):
var tempData = {};
for ( var index in data ) {
if ( data[index].Status == "Valid" ) {
tempData.Push( data );
}
}
data = tempData;
Meiner Meinung nach sollte dies alles funktionieren, aber ich erhalte die Fehlermeldung, dass tempData.Push keine Funktion ist. Ich verstehe, warum es nicht dasselbe wie ein Array ist, aber was könnte ich sonst tun?
Push()
ist für Arrays , nicht Objekte , verwenden Sie 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;
Objekte unterstützen die Push-Eigenschaft nicht, Sie können sie jedoch 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 -
Sie müssen var tempData = new Array();
machen
Push ist eine Array-Funktion.
Die Javascript-Programmiersprache unterstützt funktionale Programmierungsparadigmen, sodass Sie diese Codes problemlos verwenden 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);
Ich gehe davon aus, dass WIRKLICH Sie Objekt vom Server erhalten und Objekt bei der Ausgabe erhalten möchten
Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])
var data = { 5: { "ID": "0", "Status": "Valid" } }; // some OBJECT from server response
data = { ...data,
0: { "ID": "1", "Status": "Valid" },
1: { "ID": "2", "Status": "Invalid" },
2: { "ID": "3", "Status": "Valid" }
}
// solution 1: where output is sorted filtred array
let arr=Object.keys(data).filter(k=> data[k].Status!='Invalid').map(k=>data[k]).sort((a,b)=>+a.ID-b.ID);
// solution2: where output is filtered object
Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])
// show
console.log('Object',data);
console.log('Array ',arr);
tempData.Push( data[index] );
Ich stimme der richtigen Antwort zu, aber ... Sie geben immer noch keinen Indexwert für die Daten an, die Sie zu TempData hinzufügen möchten. Ohne den [index] -Wert wird das gesamte Array hinzugefügt.
Tun :
var data = new Array();
var tempData = new Array();