0
votes

Impossible de lire la «longueur» du message d'erreur non défini dans JavaScript

J'essaie de résoudre un défi de code sur les guerres du code et de ne pas comprendre pourquoi je reçois un message d'erreur concernant le .length code> d'une chaîne à l'intérieur d'un tableau lorsque j'essaie de exécuter.

C'est définitivement le premier .length code> dans la ligne 7. J'ai essayé d'exécuter d'autres Arr [i] .Lengths code> et ils fonctionnent, je pense que c'est un problème avec portée? p>

p>

function longestConsec(strarr, k) {
  var arr = [];
  if (strarr.length == 0 || k > strarr.length || k <= 0) {
    return "";
  }
  for (var i = 1; i <= strarr.length; i++) {
    if (strarr[i].length > strarr[0].length && arr.length < k) {
      arr.push(strarr[i]);
    }
  }
  arr.join('');
}

longestConsec(["zone", "abigail", "theta", "form", "libe", "zas"], 2);


6 commentaires

Y compris les limites seraient utiles si vous pouviez modifier votre question. Avez-vous fait un console.log () ou un débogage général pour savoir où il va mal au lieu de supposer / deviner?


Just édité, merci.


Quelle est la valeur de strarr et k lorsque la fonction est appelée?


L'itération finale de votre pour est i = 6 . Votre tableau n'a aucun élément avec un index de 6 , donc strarron [6] est non défini .


Starr est une gamme de cordes; k est un entier;


De plus, tandis que le but du code n'est pas totalement clair, je ne pense pas que votre logique soit correcte. Ce code ne se soucie pas de la durée de la durée des cordes - seulement qu'ils sont plus longs que la première chaîne de la matrice. Si vous avez deux énormes chaînes à la fin de la matrice, il suffira de retourner abigailtheta .


4 Réponses :


1
votes

Les éléments d'un tableau aller de 0 à longueur - 1 code>.

Vous avez 6 chaînes dans le tableau, le dernier ayant l'index 5. p>

parce que La condition définie que vous devez itération pendant que l'index est inférieur ou égal fort> à ferrar.length code> Il essaie d'itérer le 6ème élément, ce qui n'existe pas. P>

Vous devez modifier la condition de l'itération: p>

function longestConsec(strarr, k) {
  var arr = [];
  if (strarr.length == 0 || k > strarr.length || k <= 0) {
    return "";
  }
  for (var i = 1; i < strarr.length; i++) {
    if (strarr[i].length > strarr[0].length && arr.length < k) {
      arr.push(strarr[i]);
    }
  }
  arr.join('');
  alert(arr);
}

longestConsec(["zone", "abigail", "theta", "form", "libe", "zas"], 2);


4 commentaires

Je pense que i devrait être démarrer à 1 .


Cela "corrige" le code de l'OP, mais pour ce que cela vaut, je ne pense pas que le code lui-même fait de quoi s'attends.


C'est là, merci beaucoup, je ne sais pas comment je n'ai pas attrapé ça!


@Hyuckkang - Droite, op est comparant le premier élément de la matrice avec le reste d'entre eux. Corrigée.



0
votes

Vous êtes itération sur le tableau avec les mauvaises limites.

Vous devriez le changer entrée. Longueur - 1.

ou retirer le moins ou égal et l'utiliser que moins que l'opérateur

Étant donné que l'index du dernier élément accessible dans une matrice est la longueur de la matrice moins 1


0 commentaires

0
votes

Comme indiqué, vous êtes itérant une fois trop nombreux. Votre itération finale essaiera d'accéder à un index qui n'existe pas dans votre tableau.

Cela de côté, votre code ne semble pas fonctionner comme vous le décrivez. Il ne traite pas du "plus long" à aucun moment, mais il suffit de saisir les deux premières chaînes plus longues que la première. P>

Si vous vouliez trouver des chaînes consécutives qui se combinent pour la longueur la plus longue, considérez quelque chose comme ça à la place: p>

p>

.as-console-wrapper {max-height: none !important; top: 0;}


0 commentaires

0
votes

Vous êtes itérant une fois plus que permis: xxx

A de travail Stackblitz :


0 commentaires