web-dev-qa-db-fra.com

Impossible de lire la propriété 'Push' of indéfinie lors de la combinaison de tableaux

En poussant le contenu d'un tableau vers un autre tableau, je reçois

Erreur "Uncaught TypeError: impossible de lire la propriété 'Push' of undefined" dans cet extrait de code.

var order = new Object(), stack = [];
for(var i=0;i<a.length;i++){
    if(parseInt(a[i].daysleft) == 0){ order[0].Push(a[i]); }
    if(parseInt(a[i].daysleft) > 0){ order[1].Push(a[i]); }
    if(parseInt(a[i].daysleft) < 0){ order[2].Push(a[i]); }
}

Pourquoi ai-je cette erreur dans la seconde déclaration if? Merci beaucoup!

48
d3nm4k

Vous obtenez l'erreur car order[1] est undefined.

Ce message d'erreur signifie que quelque part dans votre code, une tentative est en cours pour accéder à une propriété avec un nom (ici, "Push"), mais au lieu d'un objet, la base de la référence est en réalité undefined. Ainsi, pour trouver le problème, recherchez un code faisant référence à ce nom de propriété ("Push") et voyez ce qu'il y a à gauche. Dans ce cas, le code est

if(parseInt(a[i].daysleft) > 0){ order[1].Push(a[i]); }

ce qui signifie que le code s'attend à ce que order[1] soit un tableau. C'est cependant pas un tableau; c'est undefined, donc vous obtenez l'erreur. Pourquoi est-ce undefined? Eh bien, votre code ne fait rien pour en faire quelque chose d'autre, basé sur le contenu de votre question.

Maintenant, si vous voulez simplement placer a[i] dans une propriété particulière de l'objet, vous n'avez pas besoin d'appeler .Push():

var order = [], stack = [];
for(var i=0;i<a.length;i++){
    if(parseInt(a[i].daysleft) == 0){ order[0] = a[i]; }
    if(parseInt(a[i].daysleft) > 0){ order[1] = a[i]; }
    if(parseInt(a[i].daysleft) < 0){ order[2] = a[i]; }
}
54
Pointy

order est un Object, pas un Array().

Push() est pour les tableaux.

Reportez-vous à ce post

Essayez ceci cependant (mais vos sous-objets doivent être Arrays()):

var order = new Array();

// initialize order; n = index
order[n] = new Array();

// and then you can perform Push()
order[n].Push(some_value);

Ou vous pouvez simplement utiliser order comme un tableau d'objets non-array:

var order = new Array();

order.Push(a[n]);
20
Kyle Emmanuel

Cette erreur se produit dans angular lorsque vous n'avez pas initialisé le tableau vierge.
À titre d'exemple:
userlist: any [];
this.userlist = [];
ou
serlist: any = [];

12
Yogesh Aggarwal

Dans la plupart des cas, vous devez initialiser le tableau,

let list: number[] = [];
2
Akitha_MJ

répondre à votre question est simple ordre n'est pas un objet en faire un tableau. var order = new Array (); order.Push (/ élément à pousser /); chaque fois que cette erreur apparaît, il suffit de vérifier à gauche de quelle propriété l'erreur est dans ce cas c'est Push qui est order [] donc elle n'est pas définie.

1
Vishal Patil

Vous n'avez pas besoin de donner un index.

Au lieu de faire order[0].Push(a[i]), faites juste order.Push(a[i]).

1
Manish

ordre [] est indéfini c'est pourquoi

Il suffit de définir ordre [1] ... [n] à = une valeur

cela devrait le réparer

0
Jimma