【问题标题】:sending parameters as array将参数作为数组发送
【发布时间】:2013-03-05 04:24:40
【问题描述】:

我能否将所有局部变量推入一个数组并将其从ArrValues 传递到doit1 我正在尝试找到一种方法来调用和只收集我想要的数组。

a="doit1";

arr="all";
ArrValues(a,arr);

function ArrValues(a,arr){

  var func=a;
  var num=arr;
  var ID = num=='one' || num=='all' ? ['ID1','ID2','ID3','ID4'] : [];
  var Nam = num=='two' || num=='all' ? ['dog','bike','horn','goat'] : [];
  var X = num=='three' || num=='all' ? ['696','258','601','204'] : [];
  var Y = num=='four' || num=='all' ? ['119','590','594','125'] : [];
  window[func](ID,Nam,X,Y);
 }
function doit1(ID,Nam,X,Y){
 alert(ID);
 alert(Nam);
 alert(X);
 alert(Y);
}

【问题讨论】:

  • 单个数组并保留其名称?什么名字?
  • 别管名字部分

标签: javascript arrays parameter-passing


【解决方案1】:

试试这个:

var dict = { 'ID' : ID, 'Nam' : Nam, 'X' : X, 'Y' : Y };

然后将那个传递给你的函数。 (例如 doIt(dict);window[func](dict);


然后您可以像这样轻松访问任何对象变量:

function doIt(d)
{
    alert(d.ID);
    alert(d.Nam);
    alert(d.X);
    alert(d.Y);
}

【讨论】:

    【解决方案2】:

    不是传递一个数组,而是传递一个对象。

    {
        ID: num=='one' || num=='all' ? ['ID1','ID2','ID3','ID4'] : [],
        Nam: num=='two' || num=='all' ? ['dog','bike','horn','goat'] : [],
        X: num=='three' || num=='all' ? ['696','258','601','204'] : [],
        Y: num=='four' || num=='all' ? ['119','590','594','125'] : [],
    }
    

    【讨论】:

    • 使用对象与更快的全局数组有什么区别?我试图保持本地范围。我还需要它尽可能快地执行。
    • 全局数组并不快!数组是一种特殊类型的对象,但在全局/局部范围内访问数组成员、对象和变量基本上都是一回事。您可以通过更改声明对象的位置来更改其范围。
    【解决方案3】:

    您可以将所有内容都填充到一个对象中,然后将该对象传递给下一个函数。在下一个函数中,您可以通过该对象访问值。

    function ArrValues(func, num) {
    
      var obj = {}
        , all = (num === 'all')
        ;
    
      obj.ID = (all || num === 'one') ? ['ID1', 'ID2', 'ID3', 'ID4'] : [];
      obj.Nam = (all || num === 'two') ? ['dog', 'bike', 'horn', 'goat'] : [];
      obj.X = (all || num === 'three') ? ['696', '258', '601', '204'] : [];
      obj.Y = (all || num === 'four') ? ['119', '590', '594', '125'] : [];
    
      window[func](obj);
    }
    
    function doit1(obj) {
      alert(obj.ID);
      alert(obj.Nam);
      alert(obj.X);
      alert(obj.Y);
    }
    
    a = "doit1";
    arr = "all";
    ArrValues(a, arr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-09
      • 2021-03-30
      • 2018-01-08
      • 2014-06-16
      • 2021-03-30
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      相关资源
      最近更新 更多