2017-09-21 29 views
0

我有一个目录只包含javascript文件。每个内部都有一个animation()函数被导出。我的目标是随机挑选其中的一个来使用。你可以将模块导入数组吗?

在另一个文件中,我想将所有这些函数导入到一个数组中,这样我就能够以简单的方式随机选择它们。

我想:

var animations=[ 
    require('./Animations/1.js'), 
    require('./Animations/2.js'), 
    require('./Animations/3.js'), 
] 

但这并没有工作。这可能吗?我知道我可以先将它们全部导入,然后将它们存储在一个数组中,但是如果有一种方法可以将它们直接导入到数组中,它将更加干净。

+0

我不知道这是怎么在阵列中完成,但也许你可以做这样的事情。 var(Math.random()* 3)+ 1);然后做这个require('./ Animations /'+ num +'.js'); – schylake

回答

0

首先,当您键入require('./Animations/1.js')等时,您正在输入实际的程序语句(“命令”)而不是JavaScript对象(“数据”)。数组包含值,而不是命令。尽管如此,你可以有一个模块/文件名称的数组,其名称是用引号括起来的字符串。您可以在require语句中使用变量,并执行任何要操作的内容并更改该变量的值。所以如果你想从一个名称数组中随机选择一个名字,并在require声明中使用该名称,那么你当然可以这样做。

我想这和它的作品:

var fileNames = [ 
'mouse', 
'bird', 
'rabbit' 
]; 

var n = Math.floor(Math.random() * fileNames.length); 

var url = './' + fileNames[n] + '.js'; 

require(url); 

animate(); 

我使用随机的文件名(“鼠标”,“鸟”,“兔”)我的例子,因为你并不总是有一个适合的名字一个很好的数字序列没有空白。但是,如果您确定自己的名称符合整洁,定义明确的模式,那么当然可以相应地组织您的代码。

要回答原始问题“您能否将模块导入数组?”,答案是肯定的,如果您确实想这样做。如果你开始与require报表工作,你可能已经看到他们被用来给值的变量,就像这样:

var Mouse = require './mouse'; 
var Bird = require './bird'; 
var Rabbit = require './rabbit'; 

然后,您可以填补与该模块实际引用数组,而不是只是他们的名字:

var modules = [Mouse, Bird, Rabbit];

+0

谢谢!这是超级有用的。不_exactly_我​​问,但仍然是一个非常干净的有用的方法。 –

+0

我刚刚添加了几段来解释如何有人可以添加实际引用的模块,而不是只是模块的名称,如果他们真的想。 –

相关问题