2016-08-30 161 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]);