如何将数组值单独传递给函数?

时间:2015-04-16 16:48:35

标签: javascript arrays

我希望能够在我的项目中使用HashIDs。 使用HashID,您可以从一个或n个整数创建哈希ID,如下所示:

encrypt(1);
encrypt(1,2,3,4);
encrypt(1,2,...n);

这对于一个变量已经很好用,但不幸的是我有时会收到一串我想编码的逗号分隔数字。所以它将是“1,2,3,4,5”。

当然我可以很容易地把它变成一个数组,但是数组没有帮助,因为我仍然需要单独传递贵重物品来加密。由于我不知道字符串中有多少整数,我不知道如何实现它。

巧合的是,PHP has a way for dealing with that exact same problem

我怎样才能在JavaScript中实现这一目标?

3 个答案:

答案 0 :(得分:2)

您可以拆分为数组并将值转换为整数,然后使用Function.prototype.apply method调用encrypt()将数组值作为参数传递。

这是一个解决方案:

var myArgs = "1,2,3,4,5"; // etc.

myArgs = myArgs.split(",").map(function(i) {return parseInt(i);});
encrypt.apply(this, myArgs);

解释:第一行只是一项任务;第二行使用.split()方法将您的字符串转换为字符数组,使用.map(...)将其解析为整数数组;最后,第三行使用.apply()方法将您的数组值应用为函数的参数,并按您的意愿调用encrypt(1, 2, 3, 4, 5);

答案 1 :(得分:1)

您应该尝试使用arguments对象(它包含传递给函数的所有参数):

   function callEncrypt() {
       return this.apply(encrypt, arguments);
   }

然后你可以根据需要使用尽可能多的参数:

callEncrypt(1);
callEncrypt(1, 2);
callEncrypt(1, 2, 3);

答案 2 :(得分:0)

使用ES6 spread operator

传递参数
var myArgs = "1,2,3,4,5"; // etc.
myArgs = myArgs . split(',') . map(parseInt);

encrypt(...myArgs);