我目前有这样的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;
}
但是当我运行脚本时,结果却不同了。我做错了什么?
提前致谢。
答案 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]);