web-dev-qa-db-de.com

Javascript Object Push () - Funktion

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?

69
Andrew Jackman

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;
104
Matt Ball

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 -

10
Cesar Santana

Sie müssen var tempData = new Array(); machen

Push ist eine Array-Funktion.

4
Alex Dn

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);
3
regex

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);
1
    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.

0
user3094826

Tun :


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