11
votes

Obtenez une longueur maximale de l'élément de tableau JavaScript

Si j'ai le tableau suivant:

array = ['a', 'abcde', 'ab'] ;


1 commentaires

Merci pour toutes vos réponses. Toutes les solutions fonctionnaient parfaitement avec l'exemple que j'ai donné, où tous les éléments de la matrice sont des chaînes. Pour toute personne intéressée, une légère addition doit être faite (je pense) si les éléments de tableau sont numériques: $ max (maxlength, élément.length); alerte (élément + '+ maxlength)}); S'il y a un moyen de faire «plus intelligent», faites le moi savoir. Merci encore pour l'aide Paul Jones


8 Réponses :


2
votes

Vous pouvez utiliser JQuery's's chacun () code> pour itérer un Petit plus agréable.

var maxLength = 0;

for (var i = 0, length = array.length; i < length; i++) {
   maxLength = Math.max(maxLength, array[i].length);
};


1 commentaires

Merci pour toutes les réponses - toutes les solutions fonctionnaient parfaitement. Pour toute personne intéressée, une légère addition doit être faite si les éléments de tableau sont numériques:



5
votes

une façon (éventuellement déchets) de faire cela, sans utiliser jQuery: xxx


3 commentaires

Rien de mal avec un bon vieux pour la boucle, probablement plus rapide que d'autres solutions. Vous pouvez tester une méthode natif chaque .


À en juger par le Downvote reçu, je suppose que l'auto-déprécation n'est pas une bonne idée ici. Bonne idée de chaque cependant.


Il est possible de convertir cette expression autonome en utilisant array.reduce .



0
votes

Il y a plusieurs façons de le faire.

Je voudrais parcourir tous les éléments de la matrice et stockeriez l'élément le plus long dans une variable locale. Vous obtenez l'élément le plus long en comparant le premier élément de tableau avec le second, puis en stockant le plus long. Puis allez et comparez chaque élément avec le plus long jusqu'à présent.

Vous avez juste besoin d'une seule boucle pour le faire.


0 commentaires

23
votes

one-liner pour vous: xxx

Exemple de travail: http: //jsfiddle.net/5sdbx/

Vous pouvez le faire sans jQuery dans les navigateurs plus récents (ou même les navigateurs plus anciens avec un Mise en œuvre de la compatibilité de array.pototype.map ) aussi: xxx


4 commentaires

Heh, j'étais sur le point d'écrire exactement cette ligne, bien que possible sans JQuery.


@Tim sans jQuery? Es-tu fou? : P


@IM: Ouais, pensé à ce sujet, mais c'est-à-dire à IE8 et à Basse m'a fait réfléchir à nouveau :-) Edit: a ajouté.


Vous avez déjà eu votre +1. Qu'est-ce que je fais maintenant? Avoir un "bien fait". Bien fait.



0
votes

Vous pouvez créer votre propre code. Suivez ceci -> xxx

puis utilisez xxx


0 commentaires

2
votes

En utilisant array.pototype.reduce () code>, vous pouvez effectuer élégamment un math.max () code> Calcul pour chaque élément de la matrice. Peu importe si les éléments de la matrice sont des chaînes ou des sous-tableaux (matrice 2D, matrice, etc.), cela fonctionnera car chaîne code> et tableau code> Les deux ont un prototype.length () code> fonction.

J'ai aussi ajouté une vérification des valeurs entier par Votre commentaire ci-dessus. p>

p>

function(a){return a.reduce(function(r,v){return Math.max(r,!isNaN(v)?parseInt(v):v.length);},0);}


0 commentaires

8
votes

Une nouvelle réponse à une ancienne question: en ES6, vous pouvez faire encore plus de diffusion:

Math.max(...array.map(el => el.length));


0 commentaires

1
votes

Dans de tels cas, il existe une fonction très utile. Array.Rece

['a', 'abcde', 'ab'].reduce((r,s) => r.length > s.length ? r : s, 0);


0 commentaires