执行无数组中的每个键的函数

执行无数组中的每个键的函数

问题描述:

我正在寻找在将数组连接到一个字符串之前为数组中的每个键执行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

为什么不会“encodeURIComponent(dynamicArray).join('/');”工作? – 2011-06-02 12:30:01

+0

为什么你不想使用循环 – Petah 2011-06-02 12:31:47

+0

@Gunner,因为“encodeURIComponent()”本质上并不理解单独编码数组中所有字符串的想法。 – Pointy 2011-06-02 12:35:10

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()”对回调函数的返回值有(对我来说,令人不愉快的)语义。