Je vais juste apprendre à utiliser les fonctions JS High-Order (carte, foreseach, réduire, etc.) et avoir trébuché dans la confusion. J'essaie d'écrire une fonction de «gamme» simple, mais je ne peux pas sembler peupler mon réseau de sortie. C'est l'objectif: Je reçois cela: p> voici mon code: p> Qu'est-ce que je manque ici? Pour autant que je puisse dire que le problème semble avoir quelque chose à voir avec la façon dont j'utilise «nouveau tableau», mais au-delà de cela, je suis perdu. P> Oh, et voici la partie qui confond vraiment moi. Cela fonctionne bien: p> merci !! p> p>
4 Réponses :
Le problème est que i suggère d'utiliser un mappe code> ne pas itérer des entrées non définies (*).
pour code> boucle à la place: p>
var rangeArr = new Array((num2 + 1) - num1);
for(var i=0; i<=num2-num1; ++i)
rangeArr[i] = num1 + i;
return rangeArr;
[indéfini, indéfini, non défini] .map () itération réellement
@Cristimihai je voulais dire ce type de non défini: []. Mappe () code>
Je comprends que .map () code> n'est pas censé itérer sur des index qui n'ont jamais été attribués de valeurs, mais pourquoi le code de l'OP renvoie-t-il un tableau avec quatre éléments indéfinis de celui-ci et un
.Length code> de 4?
@nnnnnn parce que le tableau retourné est créé à l'aide de Nouveau tableau (LEN) CODE> (voir
len code> est la longueur de la matrice initiale.
Ah. Donc, .map () code> retournera toujours une matrice de la même longueur que le tableau qu'il a été appelé, même s'il ne peut pas appeler le rappel de certains éléments?
Le tableau est défini avec 4 entiers dont chacun est indéfini. P>
carte ne va pas itérair sur des intérêts non définis, il les saute. P>
rappel est invoqué uniquement pour les index de la matrice qui ont affecté valeurs; il n'est pas invoqué pour les index indéfinis, ceux qui ont été supprimés ou qui n'ont jamais été attribués de valeurs. P> blockQuote>
Lorsque vous créez un nouveau tableau (x) code> il crée ce qu'on appelle un tableau
[non défini x 20, "foo", non défini x 5] code> Si vous venez de définir une seule valeur, et je crois que cela n'hétère pas sur ces valeurs. P>
Pas sûr que je suive assez. Voulez-vous dire si j'étais ajouté cela sous le var rangearr code> Déclaration:
rangearr [0] = num1 code>?
La méthode MDN décrit foreach exécute le rappel fourni une fois pour chaque élément de la
tableau avec une valeur attribuée. Il est Voici une technique soignée pour obtenir un tableau avec des index vides, mais existants, mais existants. p> ceci fonctionne car foreach code> itère sur les indices du tableau fort>. Il est intéressant de noter que lorsque vous créez un nouveau tableau via
nouveau tableau (n) code>, il contient aucun indice du tout em>. Au lieu de cela, il vient de définir sa propriété
.Longueur code>.
foreach code>, et spécifiquement états: p>
.Apply code> "élargit" les éléments élus dans des arguments appropriés et les résultats finissent par être quelque chose comme
tableau (indéfini, non défini, indéfini) code>. p> p>
Très cool, travaillé comme un charme !!! Acceptera votre réponse en T-moins 4 minutes et comptera;)
Hors de curiosité, toute idée de savoir pourquoi voudrait-on un tableau sans index? Est-ce que cela ne vainne pas le but?
@I_Made_That: Je ne peux pas vraiment penser à un cas d'utilisation pour cela. Il me semble être juste une autre barnacle compatible avec l'API standard de JavaScript. :]
Ne pensez pas que vous avez besoin »(num2 + 1) - Num1)", puisque JavaScript utilise des matrices dynamiques.
@Serdnad Ce n'est pas nécessaire, mais il construit un tableau vide de cette longueur:
tableau (4) = [non défini x 4] code>
Notez sur l'utilisation de
.map () code> qui n'est pas lié à votre problème: Dans votre rappel, il n'y a pas besoin d'avoir
retour arr [i] = num1 + i code>, vous pouvez Dites simplement
retour num1 + i; code>. Il n'y a aucun point de réglage des valeurs dans
Art code> - qui est le même tableau que
rangearr code> - parce que
mappe code> construit un nouveau tableau et c'est ce que vous êtes retour de votre
plage () code> fonction.
@Serdnad signifie-t-il que je pouvais simplement avoir déclaré un tableau vide?
@i_made_tha bien, vous pourriez avoir. JavaScript utilise des matrices dynamiques, de sorte que cela augmentera si besoin d'être. Bien sûr, vous sacrifiez un peu de performance, mais il est parfois plus pratique, si vous n'êtes pas sûr de la taille de votre matrice dont vous avez besoin et que vous ne voulez pas commencer par un matrice massif pour compenser. Comme Cincodenada a clarifié cependant, pas nécessaire.
étroitement lié: JavaScript
nouveau tableau (n) code> et
array.pototype.map code> étrangeté