web-dev-qa-db-fra.com

Fonction JavaScript Object Push ()

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?

69
Andrew Jackman

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

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 -

10
Cesar Santana

Vous devez faire var tempData = new Array();

Push est une fonction de tableau.

4
Alex Dn

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

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);
1
Kamil Kiełczewski
    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é.

0
user3094826

Faire :


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