首页 > 解决方案 > JavaScript如何基于数组调用函数的函数等?

问题描述

我真的不知道如何表达这个问题,这就是为什么我在谷歌上搜索它时遇到了一些麻烦,但我基本上正在尝试制作一个用于修改 mongoDB 数据的辅助函数,并且我有一个命令列表,这种格式:

              var commands = {
                    "find": {
                        "names": {
                            "find":["query"],
                            "toArray":["callback"]
                        }
                    },
                    "sort": {
                        "names": {
                            "find":[],
                            "sort":["query"],
                            "toArray":["callback"]
                          }                          
                    },
                    "limit": {
                        "names": {
                            "find":[],
                            "limit":["number"],
                            "toArray":["callback"]
                          }                          
                    },
                    "deleteOne": {
                        "args":["query","callback"]
                    },
                    "findOne": {
                        "args":["query", "callback"]
                    },
                    "insertOne": {
                        "args":["query", "callback"]
                    },
                    "insertMany": {
                        "args":["array"]
                    },
                    "remove": {
                        "args":["query", "callback"]
                    },
                    "drop": {
                        "args":["callback"]
                    },
                    "updateOne": {
                        "args":["query", "newvalues", "callback"]
                    },
                    "aggregate": {
                        "args": ["query"],
                        "hasCB":"toArray"
                    },
                    "createCollection": {
                        "args":["string", "callback"]
                    }
                };

然后是这些值的字典:想法是根据输入调用特定的 mongoDB 函数,例如

Based off of this, I am able to make an array that looks like this:

[["find",[]],["sort",[{"name":-1}]],["toArray",[/*some function reference*/]]],

基于此,我想致电:

something.find().sort({"name":-1}).toArray(callback);

如果我有这样的事情:

[["find",[{"name":"hi"}]],["toArray",[/一些函数参考/]]],

我应该能够产生以下结果:something.find({"name":"hi"}).toArray(cb);

都在同一个功能。

这不是一个 node.js 问题,更多的是一般的 JavaScript,它给出了一个格式为

[[functionName1,arrayOfArguments1],[functionName2,arrayOfArguments2],[functionName3,arrayOfArguments3]]

你怎么 functionName1(...arrayOfArguments1)[functionName2](...arrayOfArguments2)[functionName3](...arrayOfArguments3)称呼

可以说是使用循环还是一个函数?我如何产生这个结果,而不是手动写出来?我目前正在使用开关/外壳这样做,但这并不理想:

switch(funcList.length) {
                        case 2:
                            console.log(col[funcList[0][0]](...funcList[0][1])[funcList[1][0]](...funcList[1][1]));
                            break;
                        case 3:
                            console.log(col[funcList[0][0]](...funcList[0][1])[funcList[1][0]](...funcList[1][1])[funcList[2][0]](...funcList[2][1]));
                            break;
                    }

标签: javascriptarraysfunctioncalling-convention

解决方案


你只需用表名解析

var Jstr = JSON.parse(commands).find;

现在,Jstr 包含

"names": {
     "find":["query"],
      "toArray":["callback"]
  }

与此相同,您可以解析并获取值。


推荐阅读