NodeJs Javascript从数组动态调用函数

NodeJs Javascript从数组动态调用函数,javascript,node.js,Javascript,Node.js,所以我搜索了一下堆栈溢出,似乎找不到任何人们认为有效的东西 所以我有一个对象数组 Report_Search_List = [ {"NAME":"CHART OF ACCOUNTS", "PDF":"CHART_OF_ACCOUNTS_PDF", "XLS":"CHART_OF_ACCOUNTS_XLS"}, {"NAME":"GENERAL LEDGER", "PDF":"GENERAL_LEDGER_PDF", "XLS":"GENERAL_LEDGER_XLS"},

所以我搜索了一下堆栈溢出,似乎找不到任何人们认为有效的东西

所以我有一个对象数组

Report_Search_List = [
    {"NAME":"CHART OF ACCOUNTS", "PDF":"CHART_OF_ACCOUNTS_PDF", "XLS":"CHART_OF_ACCOUNTS_XLS"},
    {"NAME":"GENERAL LEDGER", "PDF":"GENERAL_LEDGER_PDF", "XLS":"GENERAL_LEDGER_XLS"},
    {"NAME":"COST REPORT", "PDF":"COST_REPORT_PDF", "XLS":"COST_REPORT_XLS"},
    {"NAME":"CASH FLOW", "PDF":"CASH_FLOW_PDF", "XLS":"CASH_FLOW_XLS"},
    {"NAME":"INVOICE", "PDF":"INVOICE_PDF", "XLS":"INVOICE_XLS"},
    {"NAME":"CREDIT NOTE", "PDF":"CREDIT_NOTE_PDF", "XLS":"CREDIT_NOTE_XLS"},
    {"NAME":"JOBCARD COST", "PDF":"JOBCARD_COST_PDF", "XLS":"JOBCARD_COST_XLS"},
    {"NAME":"GOODS RECEIVED VOUCHER", "PDF":"GOODS_RECEIVED_VOUCHER_PDF", "XLS":"GOODS RECEIVED VOUCHER_XLS"},
    {"NAME":"GOODS RETURNED NOTE", "PDF":"GOODS_RETURNED_NOTE_PDF", "XLS":"GOODS_RETURNED_NOTE_XLS"},
    {"NAME":"REQUISITION", "PDF":"REQUISITION_PDF", "XLS":"REQUISITION_XLS"},
    {"NAME":"DELIVERY NOTE", "PDF":"DELIVERY_NOTE_PDF", "XLS":"DELIVERY_NOTE_XLS"},
    {"NAME":"PICK SLIP", "PDF":"PICK_SLIP_PDF", "XLS":"PICK_SLIP_XLS"},
    {"NAME":"PETTY CASH", "PDF":"PETTY_CASH_PDF", "XLS":"DELIVERY_NOTE_XLS"},
    {"NAME":"OTHER TRANSACTIONS", "PDF":"OTHER_TRANSACTIONS_PDF", "XLS":"OTHER_TRANSACTIONS_XLS"},
    {"NAME":"PURCHASE ORDER", "PDF":"PURCHASE_ORDER_PDF", "XLS":"PURCHASE_ORDER_XLS"}
]
因此,它首先构建一个搜索列表供用户选择

Report_Search_List[index].NAME
选择报告后,单击按钮PDF或XLS

下面是函数

function PDF_CLICK() {
    try {
        var text = "none";
        var BRANCH_PDF_REPORTS_PROFILE_SELECT = document.getElementById('BRANCH_PDF_REPORTS_PROFILE_SELECT');
        text = BRANCH_PDF_REPORTS_PROFILE_SELECT.value;
        //get array list
        var report = Report_Search_List.filter(function (el) {
            return el["NAME"] == text;
        });
        //PROBLEM IS HERE
//run method
Window[report[0]["PDF"]]();
window[report[0]["PDF"]]();
report[0]["PDF"].call();
report[0]["PDF"]();
    } catch (e) {
        console.log(e);
        EX_JS_ALERT.ALERT("OOPS SOMETHING WENT WRONG"); EX_JS_ERROR.ERROR(e.toString(), location.pathname);;
    }
}
现在问题来了


我已经尝试了上面的所有方法,它得到了正确的报告,但仍然返回,它不是一个函数。同时,下面还有一个函数。

这被标记为
node.js
,所以我假设它没有在浏览器中运行。因此,没有用于查找全局变量的
窗口
对象。您可以在节点中的
global
对象上显式定义内容,但这很少是一个好主意。一种更好的方法是创建一个对象,该对象包含使用您希望用来调用函数的文本命名的键

因此,对于您的数据子集,您可能会有如下安排:

const Report\u Search\u List=[
{“名称”:“会计科目表”、“PDF”:“会计科目表”、“XLS”:“会计科目表”},
{“名称”:“总帐”,“PDF”:“总帐”\u PDF,“XLS”:“总帐”}
]
常量函数={
帐户的图表PDF(){console.log(“调用的图表”)},
总帐PDF(){console.log(“账本调用”)}
}
//现在,您可以使用字符串调用它们:
函数[报表搜索列表[0][“PDF”]]()

函数[Report_Search_List[1][“PDF”]]()
,因此我发现如何执行此操作窗口不是您正在使用的当前窗口

所以我在页面顶部所做的是

const EX_JS_BRANCH_REPORTS_PDF = require('../BRANCH/EX_JS_BRANCH_REPORTS_PDF.js');
然后换了

作用于

exports.GENERAL_LEDGER_PDF = function(){}
然后我将窗口更改为EX_JS_BRANCH_REPORTS_PDF和动态工作XD

EX_JS_BRANCH_REPORTS_PDF[report[0]["PDF"]]();

你能提供完整的错误日志吗?上面写着窗口[报告[0][“PDF”]]();窗口[报告[0][“PDF”]]();报表[0][“PDF”].call();报告[0][“PDF”]();谢谢你的帮助,巴德,但我不能那样设置它。我确实在另一页看到了这个建议。性能有差异吗?在两者之间的用户?