J'ai un objet javascript (je récupère les données via une requête ajax):
var data = {};
J'ai ajouté des trucs dedans:
data[0] = { "ID": "1"; "Status": "Valid" }
data[1] = { "ID": "2"; "Status": "Invalid" }
Maintenant, je veux supprimer tous les objets avec un statut invalide (mais garder le même ordre):
var tempData = {};
for ( var index in data ) {
if ( data[index].Status == "Valid" ) {
tempData.Push( data );
}
}
data = tempData;
Dans mon esprit, tout cela devrait fonctionner, mais je reçois le message erroné que tempData.Push n'est pas une fonction. Je comprends pourquoi ce n'est pas la même chose qu'un tableau, mais que pourrais-je faire autrement?
Push()
est pour les tableaux , pas objets , utilisez donc la bonne structure de données.
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;
Les objets ne prennent pas en charge la propriété Push, mais vous pouvez également l'enregistrer en utilisant l'index comme clé,
var tempData = {};
for ( var index in data ) {
if ( data[index].Status == "Valid" ) {
tempData[index] = data;
}
}
data = tempData;
Je pense que c'est plus facile si vous supprimez l'objet si son statut est invalide, en le faisant.
for(var index in data){
if(data[index].Status == "Invalid"){
delete data[index];
}
}
Et enfin, vous n'avez pas besoin de créer un var temp -
Vous devez faire var tempData = new Array();
Push est une fonction de tableau.
Le langage de programmation Javascript prend en charge le paradigme de la programmation fonctionnelle afin que vous puissiez facilement utiliser ces codes.
var data = [
{"Id": "1", "Status": "Valid"},
{"Id": "2", "Status": "Invalid"}
];
var isValid = function(data){
return data.Status === "Valid";
};
var valids = data.filter(isValid);
Je suppose que VRAIMENT vous obtenez un objet du serveur et que vous voulez obtenir un objet en sortie
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] );
Je suis d'accord avec la réponse correcte ci-dessus, mais .... votre ne donne toujours pas la valeur d'index pour les données que vous souhaitez ajouter à tempData. Sans la valeur [index], tout le tableau sera ajouté.
Faire :
var data = new Array();
var tempData = new Array();