Salut J'ai 3 tableaux javascript qui doivent être passés dans une fonction lorsque l'un des 3 boutons disponibles est cliqué (un bouton pour chaque tableau)

     <button onclick="call(1)">Array1</button> 
        <button onclick="call(2)">Array2</button> 
        <button onclick="call(3)">Array3</button> 

        JS-
        var arr1 = ["s","o","m","e"];
        var arr2 =[];
        var arr3 =[];

        function call(x){
           // some code here
             if(x==1){
             another_func(arr1);
        }
             else if(x==2){
             another_func(arr2);
        }
             else if(x==3){
              another_func(arr3);
        }

        }

Cela fonctionne bien, mais je souhaite me débarrasser de cela si autre boucle. Étant donné que les noms de tableaux diffèrent uniquement par le chiffre «x» (x est transmis par le bouton lorsque vous cliquez dessus)

 function call(x){
               // some code here
                 var apple="arr"+x;

                 another_func(apple);
       }

Mais cela s'est détraqué. Je connais la raison pour laquelle étant donné que javascript est un langage vaguement tapé, il a interprété ce dernier paramètre comme une chaîne au lieu d'un tableau.

Quelqu'un pourrait-il suggérer comment procéder?

0
Raghav Motwani 23 juil. 2015 à 09:58

3 réponses

Meilleure réponse

Vous pouvez éventuellement opter pour le tableau temporaire:

var arr1 = ['f', 'i', 'r', 's', 't'];
var arr2 = ["s", "e", "c", "o", "n", "d"];
var arr3 = ["t", "h", "i", "r", "d"];
var temp = [arr1, arr2, arr3];//work around
var call = function(x) {
  alert('Array >> ' + temp[x - 1]); // -1 to get the index
};
<button onclick="call(1)">Array1</button>
<button onclick="call(2)">Array2</button>
<button onclick="call(3)">Array3</button>

OU, vous pouvez opter pour un objet temporaire:

var arr1 = ['f', 'i', 'r', 's', 't'];
var arr2 = ["s", "e", "c", "o", "n", "d"];
var arr3 = ["t", "h", "i", "r", "d"];
var temp = {
  '1': arr1,
  '2': arr2,
  '3': arr3
}; //work around
var call = function(x) {
  alert('Array >> ' + temp[x]);
};
<button onclick="call(1)">Array1</button>
<button onclick="call(2)">Array2</button>
<button onclick="call(3)">Array3</button>
1
user2575725user2575725 23 juil. 2015 à 07:22

Vous pouvez essayer d'utiliser un tableau multidimensionnel.

Changez votre code comme ceci

var arr = [];    
arr[1] = ["s","o","m","e"];
arr[2] =[];
arr[3] =[];

<button onclick="another_func(arr[1])">Array1</button> 
<button onclick="another_func(arr[2])">Array2</button> 
<button onclick="another_func(arr[3])">Array3</button> 

Voici un jsfiddle fonctionnel - http://jsfiddle.net/ao7jL1Lm/1/

1
Pramodh Valavala 23 juil. 2015 à 07:23

Vous pouvez obtenir une version de travail dans ce jsfiddle (j'ai utilisé jQuery). Votre code doit être le suivant en modifiant simplement la fonction call() pour utiliser another_func() au lieu de alert()

<button class="a" input="arr1" >Array1</button> 
<button class="a" input="arr2" >Array2</button> 
<button  class="a" input="arr3" >Array3</button> 

$( document ).ready(function() {
    var arr1 = ["s","o","m","e"];
    var arr2 =[];
    var arr3 =[];

    function call(x){
        another_func(x);
    }

    $('.a').click(function(){
        call(eval($(this).attr("input")));
    })
});

Cependant, de votre propre version à cette version dynamique, j'ai dû apporter les modifications suivantes:

  • utiliser le document prêt à charger Javascript après le chargement du document, afin que toutes les fonctions (y compris call()) soient disponibles en éléments HTML si nécessaire.
  • Je me suis débarrassé de la boucle dans la fonction call() en ajoutant un attribut input dans les éléments du bouton, définissant la variable qui sera transmise
  • J'ai utilisé la fonction Javascript eval(), de sorte que la chaîne passée par les attributs d'entrée soit évaluée dans les variables correspondantes
  • Débarrassé des attributs onclick (car ce ne sont pas les meilleures pratiques et les écouteurs doivent être attachés en Javascript, si possible). Ajout de la classe "a" dans les boutons, afin que l'auditeur soit attaché uniformément partout.
0
Dimos 23 juil. 2015 à 07:30