Javascript 将数组作为参数传递给函数

Javascript 将数组作为参数传递给函数,javascript,arrays,function,Javascript,Arrays,Function,我有以下功能: String.prototype.format = function() { var args = arguments; return this.replace(/{(\d+)}/g, function(match, number) { return typeof args[number] != 'undefined' ? args[number] : match; }); }; 现在假设我定义了以下代码: var dataItem =

我有以下功能:

String.prototype.format = function() {
    var args = arguments;

    return this.replace(/{(\d+)}/g, function(match, number) {
        return typeof args[number] != 'undefined' ? args[number] : match;
    });
};
现在假设我定义了以下代码:

var dataItem = { membershipId: 1, userId: 3 };
var dataKeyNames = 'membershipId,userId';
var url = '/Admin/User?MembershipId={0}&UserId={1}';
我想做的是调用format函数,传递数据项中的每个值(对于每个数据键名称)。例如,如果只有一个数据键名称,那么我可以说:

var formattedUrl = url.format(dataItem[dataKeyNames]);
但我需要能够对dataKeyNames进行拆分,并将数据项中的每个对应值作为format函数中的参数传入


如果有人能告诉我这是怎么做的,我将不胜感激。谢谢

让我们一步一步走下去

首先,可以使用
dataKeyNames.split(“,”)
将键字符串拆分为一个数组

然后,您可以在字符串数组上调用
map
,以生成一个新数组,具体来说,就是要传递给
format
方法的值。这是您与
dataItem
变量交互的地方

最后,您可以使用
url.format.apply
实际调用
format
方法和新数组。请注意,最重要的可能是将
url
作为
apply
的第一个参数传递,该参数设置
格式
将使用的

下面是我想到的代码:

var formattedUrl = url.format.apply(url, dataKeyNames.split(",").map(function (val, index, array) {
    return dataItem[val];
}));
演示:

为了使它更具可读性,您可以将其拆分为几行


参考文献:

  • String.prototype.split
    -
  • Array.prototype.map
    -
  • Array.prototype.map
    浏览器支持-
  • 函数.原型.应用
    -

dataKeyNames.split(“,”)
?然后在数组上循环调用
.format()
,使用键的值?@RocketHazmat我猜他们希望它在“一”行中。我猜在拆分字符串上使用
.map()
,并从对象中获取相应的值,将为它们提供
所需的数组。将
应用于函数call@Ian:啊!对我误解了。谢谢你的快速回复。这很有效,几乎不是任何代码。@n请不要出问题!只需远离对
地图的浏览器支持即可:-但是MDN页面在少数不支持它的浏览器中提供了一个polyfill