JavaScript迭代程序

JavaScript Iterators

本文关键字:程序 迭代 JavaScript      更新时间:2023-09-26

我在浏览MDN(Mozilla开发者网络)时遇到了迭代程序和生成器

很自然,我尝试了谷歌Chrome v21页面中给出的代码片段。具体来说,这个代码:

var it = Iterator(lang);
for (var pair in it)
  print(pair); // prints each [key, value] pair in turn

但是,控制台返回以下错误消息:

ReferenceError: Iterator is not defined

为什么?Iterator函数是否被弃用?我是不是漏掉了一点?感谢您的帮助和时间:-)

数组有一个内置的映射函数,其作用类似于迭代器。

[1,2,3].map(function(input){console.log(input)});

标准输出:

1
2
3

最糟糕的情况是,你可以轻松地设计一个迭代器对象,但没有对此进行全面测试,但如果有任何错误,你应该能够快速地使其工作。

var Iterator = function(arr){ return {
    index : -1,
    hasNext : function(){ return this.index <= arr.length; },
    hasPrevious: function(){ return this.index > 0; },
    current: function(){ return arr[ this["index"] ]; },
    next : function(){
        if(this.hasNext()){
            this.index = this.index + 1;            
            return this.current();
        } 
        return false;
    },
    previous : function(){
        if(this.hasPrevious()){
            this.index = this.index - 1
            return this.current();
        }
        return false;
    }
}   
};
var iter = Iterator([1,2,3]);
while(iter.hasNext()){
    console.log(iter.next());
}

window.Iterator AFAIK仅存在于Firefox中,而不存在于WebKit中。

从此线程:

V8是ECMAScript的实现,而不是JavaScript。后者是Mozilla对ECMAScript的非标准化扩展。

V8旨在与JSC插件兼容,JSC是WebKit/Safari中的ECMAScript实现。因此,它实现了ECMAScript的许多非标准扩展,这些扩展也在JSC中,其中大多数也在Mozilla的JavaScript语言中。

没有计划将JSC中没有的非标准功能添加到V8中。

注:JSC代表JavaScriptCore——WebKit ECMAScript实现。

var makeIterator = function (collection, property) {
    var agg = (function (collection) {
    var index = 0;
    var length = collection.length;
    return {
      next: function () {
        var element;
          if (!this.hasNext()) {
            return null;
          }
          element = collection[index][property];
          index = index + 1;
          return element;
        },
      hasNext: function () {
        return index < length;
      },
      rewind: function () {
        index = 0;
      },
      current: function () {
        return collection[index];
      }
    };
 })(collection);
 return agg;
};

var iterator = makeIterator([5,8,4,2]);
console.log(iterator.current())//5
console.log(  iterator.next() )
console.log(iterator.current()) //8
console.log(iterator.rewind());
console.log(iterator.current()) //5

这意味着Chrome v21不支持JavaScript的这一功能。这是1.7规范的一部分。尝试这样做可能有助于在Chrome中明确指定1.7支持。

对于铬,您可以使用此

var someArray = [1, 5, 7];
var someArrayEntries = someArray.entries();

这是一个链接,您可以在这里找到有趣的