2016-08-30 3 views
0

У меня сейчас есть цикл forEach.Изменение цикла forEach для for-loop в 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, я попытался преобразовать его в цикл.

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 –

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

Смежные вопросы