节点将函数名称从文件推入数组

时间:2019-05-01 09:23:00

标签: javascript node.js

在文本文件中,每一行都有一个函数,如下所示:

function1()
function2()

然后我正在读取文件中的行:

var functionArray = [] as any[];

lineReader.eachLine('test.txt', function(line, last) {

var functionArray.push(line);

    console.log(test)

});

这将返回以下内容:

['function1()','function2()']

我需要它返回:

[function1(),function2()]

我该怎么做?

1 个答案:

答案 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')
}

为了使它成为可运行的代码段,我不得不进行了一些更改,但是最后您获得了可以随意运行的函数数组