仍然是Javascript的新手。我需要编写一个20 x 20矩阵的函数。我的所有功能都输入一个数字并返回一个数字(即相同的签名)。例如,Myfunctions [1] [2]应该返回一些我可以在代码中调用的函数。
在Java中,我通常会实现一个20 x 20对象的数组,其中每个对象将实现两个函数。但是,这可能在Javascript中吗?如果没有,我该如何处理类似的事情呢?如果我需要两个矩阵来模拟这对,那也没关系。
感谢。
答案 0 :(得分:8)
由于函数是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 anotherGenerator(a, b)
{
return function ()
{
return a+b;
};
}
var sumFuncs = [],
temp,
i,
j;
for (i=0; i<20; i++)
{
temp = [];
for (j=0; j<20; j++)
{
temp.push(anotherGenerator(i, j));
}
sumFuncs.push(temp);
}
现在sumFuncs
是一个二维数组(实际上是一个数组数组),它们计算矩阵中该函数坐标的总和。这可能听起来比实际上更复杂,所以这是一个例子:
var foo = sumFuncs[7][2],
sum = foo();
console.log(sum); // prints 9
相关:
答案 1 :(得分:3)
你不能在ECMAscript中真正拥有矩阵数组结构,但你当然可以创建数组数组:
function o1() {};
function o2() {};
function o3() {};
function o4() {};
function o5() {};
function o6() {};
var Myfunctions = [
[ o1, o2 ],
[ o3, o4 ],
[ o5, o6 ]
];
现在
Myfunctions[0][1]();
将执行上例中的函数o2
。
答案 2 :(得分:2)
您可以使用两个函数创建一个对象并将其放入数组中。
答案 3 :(得分:1)
您是否考虑过使用功能工厂
function makeFunction(one, two) {
return function () {
...
}
}
makeFunction(1,2);
// not functionMatrix[1][2]
答案 4 :(得分:1)
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);
答案 5 :(得分:0)
这是一组2d数组函数:
几乎所有这些都是匿名函数,除了一个用来向你展示它是如何工作的。
您可以这样使用:var myresult = myFuncs[2][3].func1(45);
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; }
}
]
];