Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中实现函数数组?_Javascript_Arrays_Function - Fatal编程技术网

如何在JavaScript中实现函数数组?

如何在JavaScript中实现函数数组?,javascript,arrays,function,Javascript,Arrays,Function,我对JavaScript还是新手。我需要编写一个20 x 20的矩阵对函数。我的所有函数都接收一个数字并返回一个数字(即,相同的签名)。例如,Myfunctions[1][2]应该返回我可以在代码中调用的一对函数 在Java中,我通常会实现一个20 x 20对象的数组,其中每个对象将实现两个函数。但是,这在JavaScript中可能吗?如果没有,我应该如何着手得到类似的东西?如果我需要两个矩阵来模拟这对,这也可以。因为函数是JavaScript中的对象,所以您可以很容易地定义它们的数组 func

我对JavaScript还是新手。我需要编写一个20 x 20的矩阵对函数。我的所有函数都接收一个数字并返回一个数字(即,相同的签名)。例如,Myfunctions[1][2]应该返回我可以在代码中调用的一对函数


在Java中,我通常会实现一个20 x 20对象的数组,其中每个对象将实现两个函数。但是,这在JavaScript中可能吗?如果没有,我应该如何着手得到类似的东西?如果我需要两个矩阵来模拟这对,这也可以。

因为函数是JavaScript中的对象,所以您可以很容易地定义它们的数组

function foo () { ... }
function bar () { ... }
function baz () { ... }

var fns = [foo, bar, baz];
签名一点也不重要


从这里开始,您可以在循环中动态生成函数,而不是显式声明每个函数:

function generator(n)
{
    return function ()
    {
        return n*n;
    };
}

var squareFuncs = [];

for (var i=0; i<10; i++)
{
    squareFuncs.push(generator(i));
}

相关的:


您不能在ECMAscript中真正拥有矩阵数组结构,但您可以创建数组数组,当然:

function o1() {};
function o2() {};
function o3() {};
function o4() {};
function o5() {};
function o6() {};

var Myfunctions = [
    [ o1, o2 ],
    [ o3, o4 ],
    [ o5, o6 ]
];
现在


将执行上述示例中的函数
o2

这里是一个二维函数对数组:

几乎所有这些函数都是匿名函数,只有一个函数向您展示了如何工作

您可以这样使用:
var myresult=myFuncs[2][3].func1(45)


考虑改用函数工厂:

function makeFunction(one, two) {
  return function () {
    ...
  }
}

makeFunction(1,2);
// Not functionMatrix[1][2]

你可以创建一个包含两个函数的对象,并将其放入数组。

你真的是说
Myfunctions[1][2]
包含一对函数吗?如果需要,我可以使用两个矩阵。嗯,也许你需要澄清这个问题。为什么你需要一对功能?这是一个从/到转换系统。我的眼睛,它们流血了。我们能不能有一个函数和20个引用。@Raynos-这显然不是OP要求的。@Raynos-一个函数有20个引用同一个函数会使整个数组结构变得毫无意义,但是,如果真正的问题需要不同的函数,这个答案将说明如何做到这一点。我的一些函数将在几个单元格中重复使用,因此我不想重写它们。@JVerstry-然后使用我在那里展示的数组方法的extern。我把它放在一个地方,但是你可以把它放在任何你想要的地方。我想如果
makeFunction
有一个影响结果的闭包,这可能会很有用。我没有冒犯jAndy的意思,但为什么这是公认的答案?是的,它很好地解释了如何拥有一个二维函数引用数组(或者JS等价物,数组数组),但问题明确指出“Myfunctions[1][2]应该返回我可以在代码中调用的一对函数”。我不知道“一对函数”将如何使用,但问题中多次提到它……这不是问题中的唯一信息。还有“如果我需要两个矩阵来模拟这对,这也可以。”好吧,好吧,很公平。(除了不需要使用两个矩阵来模拟这一对之外。您可以很容易地得到a
MyFunctions[1][2]。a()
MyFunctions[1][2]。b()
语法,如其他两个答案所示。)
Myfunctions[1][2] = { 
    first: function(val) { return val + 1; }
    second: function(val) { return val - 1; }
};

firstVal = Myfunctions[1][2].first(100);
secondVal = Myfunctions[1][2].second(100);
Myfunctions[0][1]();
function extern2ArrayFunc (a) {
  return a+;
}

var myFuncs = [
    [ { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : exter2ArrayFunc },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      }
    ],
    [ { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      }
    ],
    [ { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      },
      { "func1" : function (a) { return a+1; },
        "func2" : function (b) { return b-1; }
      }
    ]
  ];
function makeFunction(one, two) {
  return function () {
    ...
  }
}

makeFunction(1,2);
// Not functionMatrix[1][2]
Myfunctions[1][2] = { 
    first: function(val) { return val + 1; }
    second: function(val) { return val - 1; }
};

firstVal = Myfunctions[1][2].first(100);
secondVal = Myfunctions[1][2].second(100);