在文本文件中,每一行都有一个函数,如下所示:
function1()
function2()
然后我正在读取文件中的行:
var functionArray = [] as any[];
lineReader.eachLine('test.txt', function(line, last) {
var functionArray.push(line);
console.log(test)
});
这将返回以下内容:
['function1()','function2()']
我需要它返回:
[function1(),function2()]
我该怎么做?
答案 0 :(得分:1)
这还取决于其他一些正确的方法,但是您可以通过删除()
并使用带括号的函数来使它正常工作。
这比eval
安全得多,尤其是在文本文件是用户可以上传并运行的东西的情况下,尤其是如果eval将运行您传递的任何文件,而使用方括号表示法则必须定义为首先运行。
var fileArray = ['function1()', 'function2()']
var functionObject = {
function1: function() {
console.log('This is function1')
},
function2: function() {
console.log('This is function2')
}
}
var functionArray = []
fileArray.forEach(function(line) {
line = line.replace('()', '')
functionArray.push(functionObject[line]);
});
console.log(functionArray)
functionArray.forEach((f) => {
f()
})
仍然,这是您可以的方式,但可能不应该使用eval
var fileArray = ['function1()', 'function2()']
var functionObject = {
function1: function() {
console.log('This is function1')
},
function2: function() {
console.log('This is function2')
}
}
var functionArray = []
fileArray.forEach(function(line) {
line = line.replace('()', '')
functionArray.push(line);
});
console.log(functionArray)
functionArray.forEach((f) => {
eval(f)()
})
function function1() {
console.log('This is function1')
}
function function2() {
console.log('This is function2')
}
为了使它成为可运行的代码段,我不得不进行了一些更改,但是最后您获得了可以随意运行的函数数组