执行无数组中的每个键的函数
问题描述:
我正在寻找在将数组连接到一个字符串之前为数组中的每个键执行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 */
答
dynamicArray.map(encodeURIComponent).join('/');
退房MDC
这可以通过这样的循环来完成针对不兼容平台的实施map
。
当然,在内部有一个循环map
的实现。
答
在一些现代浏览器那么有一个“.MAP()”为阵列方法:
var encoded = dynamicArray.map(function(str) {
return encodeURIComponent(str);
});
或没有自己的函数包装,在这种情况下是不是真的有必要:
var encoded = dynamicArray.map(encodeURIComponent);
想法是为数组的每个元素调用“.map()”。它传递的函数应返回一些结果,并将这些结果收集到一个新的数组中,该数组最终是返回的值。然后你可以“.join()”,或者做任何你需要的东西。
Mozilla documentation for ".map()"有一个“polyfill”代码块,您可以使用它在不本地支持它的浏览器中提供“.map()”。还要注意许多实用程序库都有它们自己的“.map()”,其中一些语义有些不同。例如,jQuery“.map()”对回调函数的返回值有(对我来说,令人不愉快的)语义。
为什么不会“encodeURIComponent(dynamicArray).join('/');”工作? – 2011-06-02 12:30:01
为什么你不想使用循环 – Petah 2011-06-02 12:31:47
@Gunner,因为“encodeURIComponent()”本质上并不理解单独编码数组中所有字符串的想法。 – Pointy 2011-06-02 12:35:10