正确使用迭代器而不使用...的

时间:2018-04-01 23:23:43

标签: javascript loops iterator

我使用URLSearchParams将返回迭代器对象,但在IE中不受支持。我添加了polyfill,但现在IE对返回的iterator object没有任何原生支持,因为它没有实现for...of语法。

在没有for..of的情况下调用迭代器对象的首选语法是什么?

这是ES6 for...of语法:

var paramsString = "Name=Fiona&Type=Hippo";
var urlParams = new URLSearchParams(paramsString);
var entries = urlParams.entries();

for(pair of entries) { 
  console.log(pair[0], pair[1]); 
}



var paramsString = "Name=Fiona&Type=Hippo";
var urlParams = new URLSearchParams(paramsString);
var entries = urlParams.entries();

for(pair of entries) { 
  console.log(pair[0] + ": " + pair[1]); 
}

<script src="https://cdn.rawgit.com/WebReflection/url-search-params/v0.10.0/build/url-search-params.js"></script>
&#13;
&#13;
&#13;

我很乐意找到一个规范来源,它可以将迭代器对象的调用语法实现回旧浏览器,而不依赖于转换for...of

4 个答案:

答案 0 :(得分:2)

为什么不好老forEach

console.log(urlParams);显示返回的对象具有forEach方法,但令人惊讶的是MDN

中的方法未提及
urlParams.forEach(function(value, key){ 
    console.log(key + ' : ' + value)
});

var paramsString = "Name=Fiona&Type=Hippo";
var urlParams = new URLSearchParams(paramsString);

urlParams.forEach(function(value, key){ 
  console.log(key + ' : ' + value)
});

每个浏览器中UrlSearchParams的Proto方法:

enter image description here

答案 1 :(得分:1)

如果您对while(true)感到紧张,可以试试这个:

var paramsString = "Name=Fiona&Type=Hippo";
var urlParams = new URLSearchParams(paramsString);
var entries = urlParams.entries();
var iterator = entries.next();
while(!iterator.done) {  
  if (iterator.value) {
console.log(iterator.value[0] + ": " +
            iterator.value[1])
  }
  iterator=entries.next();
}
<script src="https://cdn.rawgit.com/WebReflection/url-search-params/v0.10.0/build/url-search-params.js"></script>

答案 2 :(得分:0)

这是我对迭代器实现的尝试,但while(true)让我感到紧张。欢迎任何其他来源/实施。

&#13;
&#13;
var paramsString = "Name=Fiona&Type=Hippo";
var urlParams = new URLSearchParams(paramsString);
var entries = urlParams.entries();

while(true) {
  var iterator = entries.next()
  if (iterator.value) {
    console.log(iterator.value[0] + ": " +
                iterator.value[1])
  }
  if (iterator.done) {
    break;
  }
}
&#13;
<script src="https://cdn.rawgit.com/WebReflection/url-search-params/v0.10.0/build/url-search-params.js"></script>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我不完全确定您的约束条件是什么,但您也可以使用readr::read_table(filename, col_names=FALSE, skip=5) 变量上的spread operator,如果可以使用的话。

entries