【问题标题】:Changing forEach loop to for-loop in javascript在javascript中将forEach循环更改为for循环
【发布时间】:2016-08-31 06:56:01
【问题描述】:

我目前有一个这样的 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;
}

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

提前致谢。

【问题讨论】:

  • 在这种情况下,为 IE 填充 forEach 可能是有意义的
  • 你应该看看这个:github.com/es-shims/es5-shim
  • 在这种情况下,将 IE 更新到 edge 可能是有意义的

标签: javascript internet-explorer for-loop foreach


【解决方案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;

【讨论】:

  • 感谢您的回答。我应该多注意这样的小细节......
【解决方案2】:

问题出在这里:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      相关资源
      最近更新 更多