以有效的方式在Javascript中处理数组

时间:2015-07-23 06:58:27

标签: javascript arrays

您好我有3个javascript数组需要在单击3个可用按钮之一时传递给函数(每个数组一个按钮)

     <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);
        }

        }

这工作正常但我希望摆脱if if循环。由于数组名称只有数字'x'(点击时按钮传递了x),我试过 -

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

                 another_func(apple);
       }

但是这变成了混乱。我知道,因为javascript是松散类型的语言,它将后一个参数解释为字符串而不是数组。

有人建议我该怎么办?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用多维数组。

像这样更改你的代码

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> 

这是一个有效的jsfiddle - http://jsfiddle.net/ao7jL1Lm/1/

答案 1 :(得分:1)

可能你可以选择临时数组:

&#13;
&#13;
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
};
&#13;
<button onclick="call(1)">Array1</button>
<button onclick="call(2)">Array2</button>
<button onclick="call(3)">Array3</button>
&#13;
&#13;
&#13;

或者,你可以去临时对象:

&#13;
&#13;
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]);
};
&#13;
<button onclick="call(1)">Array1</button>
<button onclick="call(2)">Array2</button>
<button onclick="call(3)">Array3</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你可以得到一个工作版本in this jsfiddle(我使用过jQuery)。只需更改call()函数即可使用another_func()代替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")));
    })
});

但是,从您自己的版本到此动态版本,我必须进行以下更改:

  • 在文档加载后使用文档准备好加载Javascript,以便所有函数(包括call())在HTML元素中可用(如果需要)。
  • 我通过在按钮元素中添加call()属性来定义input函数中的循环,定义将传递哪个变量
  • 我使用了Javascript eval()函数,因此输入属性传递的字符串被计算为相应的变量
  • 摆脱onclick属性(因为它们不是最佳实践,并且应尽可能在Javascript中附加侦听器)。增加了课程&#34; a&#34;在按钮中,以便侦听器在任何地方均匀连接。