Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义迭代器不适用于数组对象_Javascript_Arrays_Iterator - Fatal编程技术网

Javascript 自定义迭代器不适用于数组对象

Javascript 自定义迭代器不适用于数组对象,javascript,arrays,iterator,Javascript,Arrays,Iterator,在上面的代码中,我正在为我创建的数组对象编写一个自定义迭代器。但是,它一直在为数组使用内置的Symbol.iterator,为什么会出现这种情况 这是我尝试运行自定义迭代器时的输出 正如您所知,它运行的是内置迭代器,而不是我制作的自定义迭代器 这就是你出错的地方 您认为您没有覆盖数组。[Symbol.iterator]-您的控制台.log证明您确实覆盖了 for(数组的i)抛出一个错误uncaughttypeerror:array不可编辑,因为您的代码是错误的 在next()返回的内容中,您还

在上面的代码中,我正在为我创建的数组对象编写一个自定义迭代器。但是,它一直在为数组使用内置的Symbol.iterator,为什么会出现这种情况

这是我尝试运行自定义迭代器时的输出


正如您所知,它运行的是内置迭代器,而不是我制作的自定义迭代器

这就是你出错的地方

  • 您认为您没有覆盖
    数组。[Symbol.iterator]
    -您的
    控制台.log
    证明您确实覆盖了
  • for(数组的i)
    抛出一个错误
    uncaughttypeerror:array不可编辑
    ,因为您的代码是错误的
  • next()
    返回的内容中,您还交换了
    done
    value
    的含义
  • 完成后,
    value
    应该是值
    undefined
    而不是字符串
    “undefined”
  • array[Symbol.iterator]
    需要是一个函数,但由于最后的
    ()
  • 解决所有问题,你就可以

    var数组=[1,2,3,4,6,6,6,6];
    数组[Symbol.iterator]=函数(){
    设电流=0;
    返回{
    下一个:()=>{
    如果(当前!=此.length){
    返回{value:this[current++],done:false};
    }else if(当前===此.length){
    返回{value:undefined,done:true};
    }否则{
    console.log('有东西坏了!')
    }
    }
    };
    };
    for(让我来看看数组){
    控制台日志(i);
    
    }
    你是如何尝试“使用”这个迭代器的?在第一行结束后删除这个
    2
    数字。@Azhy ya知道为什么会有这个数字,但这没什么区别。问题是你在使用
    中的…并认为这在使用你的代码-它没有。
    for…in
    语句迭代对象的所有非符号、可枚举属性。其中,
    for…of
    语句创建了一个循环,循环遍历iterable对象——这就是为什么我20分钟前问你如何使用它——你似乎忽略了它,最后,
    数组[Symbol.iterator]
    需要是一个函数,但因为
    }()您已将其设置为ObjectFor循环只是“测试”代码,以显示其工作情况-与实际用例无关:p但已将其设置为Completeness否,您是对的,答案应使用“正确”代码原则:p
    
    var array = [1, 2, 3, 4, 6, 6, 6, 6, 6];
    array[Symbol.iterator] = (function() {
      var current = 0;
      console.log('executed')
      var iterator = {
        next: function() {
          var iteratorObject = {
            done: "undefined",
            value: false
          };
          //returns the next item in the sequence
          if (current != this.length) {
    
            iteratorObject.done = this[current];
            current++;
    
            //return false
            return iteratorObject;
          } else if (current === this.length) {
            //finished
            //return true
            iteratorObject.done = "undefined";
            iteratorObject.value = true;
            return iteratorObject;
    
    
          } else {
            console.log('something broke!')
          }
    
        }
      }
      return iterator;
    })();