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

时间:2014-03-10 20:10:35

标签: 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 = { membershipId: 1, userId: 3 };
var dataKeyNames = 'membershipId,userId';
var url = '/Admin/User?MembershipId={0}&UserId={1}';

我想做的是调用格式函数传递数据项中的每个值(对于每个数据键名称)。例如,如果只有一个数据键名称,那么我可以说:

var formattedUrl = url.format(dataItem[dataKeyNames]);

但我需要能够对dataKeyNames进行拆分,并将格式函数中作为参数的数据项中的每个对应值传递。

如果有人能告诉我这是怎么做的,我会很感激。感谢

1 个答案:

答案 0 :(得分:2)

让我们一步一步。

首先,您可以使用dataKeyNames.split(",")将键字符串拆分为数组。

然后,您可以在字符串数组上调用map以生成新数组 - 具体来说,您要传递给format方法的值。您可以在此处与dataItem变量进行互动。

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

这是我提出的代码:

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

DEMO: http://jsfiddle.net/T4tHx/

为了使其更具可读性,您绝对可以将其分成几行。


<强>参考文献: