在JavaScript中将数组作为函数参数传递

368
我想使用数组作为参数调用一个函数:
const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it

function call_me (param0, param1, param2 ) {
  // ...
}

有没有更好的方法将x的内容传递给call_me()

12个回答

0
答案已经给出,但我想再补充一些。在JS的上下文中,你想要实现的被称作方法借用,就是我们从一个对象中获取一个方法并在另一个对象的上下文中调用它。通常我们会拿来数组方法去操作参数。让我来给你举个例子。
我们有一个"超级"哈希函数,它接收两个数字作为参数,并返回"超级安全"的哈希字符串。
function hash() {
  return arguments[0]+','+arguments[1];
}

hash(1,2); // "1,2" whoaa

目前为止一切都很好,但是我们在上述方法中遇到了一个小问题,它是受限制的,只能处理两个数字,不够灵活,让我们使其能够处理任意数量的数字,并且你不必传递一个数组(如果你仍然坚持可以传递)。好了,说够了,让我们开始吧!

自然的解决方案是使用arr.join方法:

function hash() {
  return arguments.join();
}

hash(1,2,4,..); //  Error: arguments.join is not a function

哦,不好意思,那样行不通。因为我们正在调用hash(arguments),而arguments对象既可迭代又类似于数组,但并不是真正的数组。那么下面的方法怎么样?

function hash() {
  return [].join.call(arguments);
}

hash(1,2,3,4); // "1,2,3,4" whoaa

这个技巧被称为“方法借用”。

我们从常规数组中借用一个join方法[].join。并使用[].join.callarguments的上下文中运行它。

为什么它有效呢?

因为本地方法arr.join(glue)的内部算法非常简单。

几乎按照规范的要求:

Let glue be the first argument or, if no arguments, then a comma ",".
Let result be an empty string.
Append this[0] to result.
Append glue and this[1].
Append glue and this[2].
…Do so until this.length items are glued.
Return result.

从技术上讲,它将这个与this [0]、this [1] …等连接在一起。 它被故意编写成一种允许任何类似于数组的this(这不是巧合,在实践中有许多方法遵循这种做法)的方式。 这就是为什么它也适用于this = arguments。


-1

有一个更好的方法,使用 JSON 而不是数组!

   // Call a function with a Json Key / Value Pair:
   sendMail({param1: p1, param2: p2});

   // Function definition and usage of value pairs:
   function sendMail(data){
     var parameter1 = data.param1;
     var parameter2 = data.param2;
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接