JavaScript:将字符串数组转换为变量数组,并将其作为参数传递给函数

时间:2017-05-07 04:26:06

标签: javascript arrays

我有一个数组,例如:

argumentsArray = ["arg1", "arg2"];

我有一个功能:

function1 = function () {
    console.log(arg1);
    console.log(arg2);
};

当然,执行function1会导致错误,因为arg1arg2未定义。但我不想定义这些,我希望它们用作参数,如下:

function1 = function (arg1, arg2) {
    console.log(arg1);
    console.log(arg2);
};

现在我们可以在向它传递两个参数时执行function1

function1("string1", "string2");
// will log "string1" and "string2"

但问题是,我无法更改function1的源代码。我不能编辑它的论点。我知道bind()apply()函数,但它们会做错误的事情,因为它实际应用了字符串:

getFunction1WithArgumentsFromArray = function () {
    return function () {
        return function1.apply(this, argumentsArray);
    };
};

getFunction1WithArgumentsFromArray();
// would return function1("arg1", "arg2");

问题是,arg1arg2尚未定义。它们不是字符串或任何其他东西。我的代码看起来像这样:

function1 = function () {
    console.log(arg1);
    console.log(arg2);
};

argumentsArray = ["arg1", "arg2"];

defineArgs = function() {
    arg1 = "hey";
    arg2 = "hello";
};

getFunction1WithArgumentsFromArray = function (argumentsArray) {
    argumentsToUse = convertArrayOfStringsToArrayOfVariables(argumentsArray);
    // HOW???

    return function () {
        return function1(argumentsToUse[0], argumentsToUse[1]);
    };
    // or what should i put here???
};

getFunction1WithArgumentsFromArray();
// should return this:
// function1 = function(arg1, arg2) {
//     console.log(arg1);
//     console.log(arg2);
// };
// without executing it.

所以我真正想要的是一个函数,它将一个字符串数组转换为一个带有这些字符串名称的变量数组:

["arg1", "arg2"] --> [arg1, arg2]

但直接制作这将是一个问题,因为JavaScript然后搜索这些变量。正如我所说,这些变量没有定义......

我的想法是使用apply()并传递数组with eval("string"),如下所示:

getFunction1WithArgumentsFromArray = function () {
        return function () {
            return function1.apply(
                this,
                [eval(argumentsArray[0]), eval(argumentsArray[1])]
            );
        };
    };

getFunction1WithArgumentsFromArray();
// would return "arg1 is not defined", because eval() executes the function as I define it

这对您来说似乎非常不必要,但正如我已经说过的,我无法更改function1所以我必须在另一个函数中创建它的参数列表。我的意思是,当然我可以更改它,但我正在处理的项目使用数组来获取参数。

1 个答案:

答案 0 :(得分:1)

正如我在评论中所说,定义arg1和arg2似乎是不必要的,因为无论你在哪里创建对象,你都必须已经对它进行了一些引用。

当你将这些传递给function1时,你可以轻松访问像这样的参数

function1 = function () {
  var i;
  for(i=0; i<arguments.length;i++){
  console.log(arguments[i]); // do anything with arguments[i] == arg1, arg2, 
  ...
 }
};