2016-08-30 160 views
0

我目前有一个forEach循环,如下所示。更改forEach循环以便在for循环中javascript

var videoUrls ={}; 
ytplayer.config.args.url_encoded_fmt_stream_map.split(',') 
.forEach(function(item) { 
    var obj = { }; 
    item.split('&') 
    .forEach(function(param) { 
     param = param.split('='); 
     obj[param[0]] = decodeURIComponent(param[1]); 

}); 
videoUrls[obj.quality] = obj;}); 

由于IE不支持forEach循环,我试图将其转换为for循环。

var videoUrls ={}; 
var typea= ytplayer.config.args.url_encoded_fmt_stream_map.split(','); 
for (var item=0; item<typea.length; item++){ 
    var obj= {}; 
    var typeb= typea[item].split('&'); 
    for (var param=0; param<typeb.length; param++){ 

     typeb[param]= typeb[param].split('='); 
     obj[typeb[0]] = decodeURIComponent(typeb[1]); 

} 
videoUrls[obj.quality]= obj; 
} 

但是当我运行脚本的结果是不同的。我做错了什么?

在此先感谢。

+0

在这种情况下,它可能是有意义的填充forEach IE浏览器 –

+0

你应该看看这个:https://github.com/es-shims/es5-shim – Titus

+0

在这种情况下,它可能是有意义的更新IE到边缘 – Endless

回答

1

它应该是:

typeb[param]= typeb[param].split('='); 
obj[typeb[param][0]] = decodeURIComponent(typeb[param][1]); 

因为其他的循环是:

param = param.split('='); 
obj[param[0]] = decodeURIComponent(param[1]); 

不:

obj[item.split("&")[0]] = decodeURIComponent(item.split("&")[1]) 

如果它仍然是不明确的,这里是一个简单的解释:

typeb === item.split("&"); 
typeb[param] === param; 
+0

谢谢你的回答。我应该更多地关注像这样的小细节...... – risefire

1

的问题是在这里:

for (var param=0; param<typeb.length; param++) { 
    typeb[param]= typeb[param].split('='); 
    obj[typeb[0]] = decodeURIComponent(typeb[1]); 
} 

你重写数组的元素你遍历(typeb[param]),然后用硬编码索引到同一阵列(typeb[1]

应该更像是:

for (var param=0; param<typeb.length; param++) { 
    var arr = typeb[param].split('='); 
    obj[arr[0]] = decodeURIComponent(arr[1]); 
} 
0

而且你不能使用像jQuery这样的库吗?正是出于这个原因,jQuery被构建。如果你不能那么我认为这是你需要做的 obj [typeb [param] [0]] = decodeURIComponent(typeb [param] [1]);