web-dev-qa-db-fra.com

Pourquoi est-ce que je reçois ".Push not a function"?

Qu'est ce qui ne va pas avec mon code?

function longestConsec(strarr, k) {
  var currentLongest = "";
  var counter = 0;
  var outPut = [];

  if(strarr.length === 0 || k > strarr.length || k <= 0){
    return "";
  }
  for(var i = 0; i < strarr.length; i++){
    if(strarr[i] > currentLongest){
      currentLongest = strarr[i];
    }
  }
  while(currentLongest !== strarr[counter]){
    counter = counter + 1
  }
  for (var j = 0; j < k; j ++){
    outPut = outPut.Push(strarr[counter + j]);
  }

  outPut = outPut.join("");

   return outPut;
}

Je continue à obtenir "outPut.Push n'est pas une fonction".

9
Braden Foltz

Les fonctions Array Push renvoient la longueur du tableau après avoir poussé.

Donc, dans votre code

outPut = outPut.Push(strarr[counter + j]);

outPut est maintenant un nombre, pas un tableau, donc la deuxième fois dans la boucle, outPut n'a plus de méthode Push.

Une solution simple consiste à changer cette ligne en

outPut.Push(strarr[counter + j]);
12
Jaromanda X

Array.Push

ajoute un ou plusieurs éléments à la fin d'un tableau et retourne le nouveau longueur du tableau.

Et vous avez cette ligne:

outPut = outPut.Push(strarr[counter + j]);

Vous ajoutez un élément à outPut.Push(strarr[counter + j]);, puis vous réaffectez outPush à la longueur du tableau.

Vous ne devriez appeler que la méthode Push sur le tableau et un nouvel élément sera ajouté:

for (var j = 0; j < k; j ++){
    outPut.Push(strarr[counter + j]);
}
3
Ali

Array.Push () renvoie la longueur de ce tableau particulier. Dans votre code, vous attribuez un numéro à outPut. Désormais, lorsque la boucle s'exécute pour la deuxième fois, outPut n'est plus un tableau, mais un nombre. Vous obtenez donc l'erreur.

Vous le vérifiez en enregistrant outPut sur la console. Vous allez voir ça

for (var j = 0; j < k; j ++){
    outPut = outPut.Push(strarr[counter + j]);
    console.log(outPut);
}

Il montrera:

 1
  VM696:18 Uncaught TypeError: outPut.Push is not a function
    at longestConsec (<anonymous>:18:21)
    at <anonymous>:1:1

Tout ce que vous avez à faire est de le changer pour:

for (var j = 0; j < k; j ++){
    outPut.Push(strarr[counter + j]);
}
1
Sandeep Ranjan