为数组w / o循环中的每个键执行函数

时间:2011-06-02 12:27:35

标签: javascript arrays function key

我正在寻找为数组中的每个键执行encodeURIComponent(或其他一些函数)的最佳实践,然后再将它连接到一个字符串。

这可以通过这样的循环完成:

var dynamicArray = ['uri1', 'uri2', 'hax&%hax'];
var max = dynamicArray.length,
i,
url = '';

for (i=0;i<max;(i++))
{
   url += '/' + encodeURIComponent(dynamicArray[i]);
}

alert(url);

/* RESULT: /uri1/uri2/hax%26%25hax */

但我正在寻找类似的东西(没有循环):

encodeURIComponent(dynamicArray).join('/'); /* This won't work */
encodeURIComponent(dynamicArray.join('/')); /* Can't do this, wrong result */

2 个答案:

答案 0 :(得分:4)

dynamicArray.map(encodeURIComponent).join('/');

对于不兼容的平台,请查看MDC map的实施 当然,内部在map的实现中有一个循环。

答案 1 :(得分:2)

在一些现代浏览器中,对于数组有一个“.map()”方法:

var encoded = dynamicArray.map(function(str) {
  return encodeURIComponent(str);
});

或没有你自己的函数包装器,在这种情况下不是必需的:

var encoded = dynamicArray.map(encodeURIComponent);

这个想法是为数组的每个元素调用“.map()”。它传递的函数应返回一些结果,并将这些结果收集到 new 数组中,该数组最终是返回值。然后你可以“.join()”那个,或做任何你需要的东西。

Mozilla documentation for ".map()"有一个“polyfill”代码块,可用于在本机不支持它的浏览器中提供“.map()”。还要注意,许多实用程序库都有自己的“.map()”,其中一些具有略微不同的语义。例如,jQuery“。map()”对于回调函数返回的值有(对我而言,令人不愉快)语义。