Je voudrais appeler une fonction en utilisant un tableau comme paramètres:
const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it
function call_me (param0, param1, param2 ) {
// ...
}
Existe-t-il une meilleure façon de transmettre le contenu de x
en call_me()
?
javascript
arrays
function
call
Robert
la source
la source
Pourquoi ne transmettez-vous pas l'ensemble du tableau et ne le traitez-vous pas au besoin dans la fonction?
la source
call_me
fonction. Il manque juste un point-virgule à la fin.En supposant que call_me est une fonction globale, vous ne vous attendez donc pas à ce qu'elle soit définie.
la source
Dans la norme ES6, il y a un nouvel opérateur de propagation
...
qui fait exactement cela.Il est pris en charge par tous les principaux navigateurs, à l'exception d'IE.
L'opérateur d'étalement peut faire beaucoup d'autres choses utiles, et la documentation liée fait un très bon travail pour le montrer.
la source
Comme l'avait répondu @KaptajnKold
Et vous n'avez pas non plus besoin de définir tous les paramètres de la fonction call_me. Vous pouvez simplement utiliser
arguments
la source
Notez ceci
// ---------------------------
page html
peut appeler la fonction avec n'importe quel Args
ou
la source
Les arguments de fonction peuvent également être des tableaux:
bien sûr, on peut également utiliser la propagation :
la source
Lors de l'utilisation de l'opérateur d'étalement, nous devons noter qu'il doit s'agir du dernier ou du seul paramètre transmis. Sinon, cela échouera.
Si vous devez passer un tableau comme argument de départ, vous pouvez le faire:
la source
vous pouvez utiliser l'opérateur d'étalement sous une forme plus basique
dans le cas des fonctions qui renvoient des tableaux mais qui devraient passer comme arguments
Exemple:
la source
La réponse a déjà été donnée, mais je veux juste donner mon morceau de gâteau. Ce que vous voulez réaliser s'appelle
method borrowing
dans le contexte de JS, c'est-à-dire lorsque nous prenons une méthode d'un objet et l'appelons dans le contexte d'un autre objet. Il est assez courant de prendre des méthodes de tableau et de les appliquer aux arguments. Laisse moi te donner un exemple.Nous avons donc une fonction de hachage "super" qui prend deux nombres comme argument et renvoie une chaîne de hachage "super sûre":
Jusqu'ici tout va bien, mais nous avons peu de problème avec l'approche ci-dessus, elle est contrainte, ne fonctionne qu'avec deux nombres, ce n'est pas dynamique, faisons-la fonctionner avec n'importe quel nombre et en plus vous n'avez pas à passer un tableau (vous pouvez si vous insistez encore). Ok, assez parlé, battons-nous!
La solution naturelle serait d'utiliser la
arr.join
méthode:Oh, mec. Malheureusement, cela ne fonctionnera pas. Parce que nous appelons hash (arguments) et arguments objet est à la fois itérable et semblable à un tableau, mais pas un vrai tableau. Que diriez-vous de l'approche ci-dessous?
L'astuce s'appelle
method borrowing.
Nous empruntons une
join
méthode à partir d'un tableau régulier[].join.
et utilisons[].join.call
pour l'exécuter dans le contexte dearguments
.Pourquoi ça marche?
En effet, l'algorithme interne de la méthode native
arr.join(glue)
est très simple.Tiré de la spécification presque «tel quel»:
Donc, techniquement, cela prend cela et joint ce [0], ce [1]… etc. ensemble. Il est intentionnellement écrit d'une manière qui permet tout ce qui ressemble à un tableau (ce n'est pas un hasard, de nombreuses méthodes suivent cette pratique). C'est pourquoi cela fonctionne aussi avec
this=arguments.
la source