2016-08-30 18 views
0

私は現在、このようなforEachループを持っています。for eachループをforループのjavacriptで変更する

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

この場合、IEのためにforEach for polyを使用すると意味があります –

+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]);

関連する問題