如何在JavaScript中实现函数数组?
我对JavaScript还是新手。我需要编写一个20 x 20的矩阵对函数。我的所有函数都接收一个数字并返回一个数字(即,相同的签名)。例如,Myfunctions[1][2]应该返回我可以在代码中调用的一对函数如何在JavaScript中实现函数数组?,javascript,arrays,function,Javascript,Arrays,Function,我对JavaScript还是新手。我需要编写一个20 x 20的矩阵对函数。我的所有函数都接收一个数字并返回一个数字(即,相同的签名)。例如,Myfunctions[1][2]应该返回我可以在代码中调用的一对函数 在Java中,我通常会实现一个20 x 20对象的数组,其中每个对象将实现两个函数。但是,这在JavaScript中可能吗?如果没有,我应该如何着手得到类似的东西?如果我需要两个矩阵来模拟这对,这也可以。因为函数是JavaScript中的对象,所以您可以很容易地定义它们的数组 func
在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));
}
相关的:
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]应该返回我可以在代码中调用的一对函数”。我不知道“一对函数”将如何使用,但问题中多次提到它……这不是问题中的唯一信息。还有“如果我需要两个矩阵来模拟这对,这也可以。”好吧,好吧,很公平。(除了不需要使用两个矩阵来模拟这一对之外。您可以很容易地得到aMyFunctions[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);