我正在寻找为数组中的每个键执行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 */
答案 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()”对于回调函数返回的值有(对我而言,令人不愉快)语义。