在JavaScript中将forEach循环更改为for循环

时间:2016-08-30 22:33:06

标签: javascript internet-explorer for-loop foreach

我目前有这样的forEach循环。

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;
}

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

提前致谢。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

问题在于:

typeb[param]

您将覆盖您要迭代的数组元素(typeb[1]),然后将硬编码索引用于同一个数组(for (var param=0; param<typeb.length; param++) { var arr = typeb[param].split('='); obj[arr[0]] = decodeURIComponent(arr[1]); }

应该更像是:

{{1}}

答案 2 :(得分:0)

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