js数组迭代方法,迭代对象必须实现哪些方法

  js数组迭代方法,迭代对象必须实现哪些方法

  这篇文章给大家带来了一些关于javascript的知识,包括类数组和iterable对象的实现原理,包括把对象本身构造成迭代器,String的迭代器等等。下面就来看看吧,希望对你有帮助。

  【相关推荐:javascript视频教程,web前端】

  

可迭代对象(Iterable object)

  数组是一种特殊的对象,在元素的顺序访问和存储上不同于普通对象。另一个重要的区别是数组可以被迭代,也就是说,所有元素都可以通过使用.的声明。

  我们可以简单地做一个小实验:

  设arr=[1,2,3,4,5]for(let val of arr){

  Console.log(val)}代码执行结果:

  上面的代码简单地使用了数组的迭代特性。当我们访问数组的元素时,我们不必使用元素的下标。

  如果我们使用for,会发生什么.普通对象的语句。

  让obj={

  姓名:小明,

  年龄:12,}for(let para of obj){ //代码会报错。

  Console.log(para)}执行效果如下:

  这证明了普通对象和数组之间还是有迭代间隙的。我们称迭代函数为可迭代对象的对象。

  

Symbol.iterator

  如果我们想让一个对象迭代,我们必须给对象添加一个名为Symbol.iterator(一个专门让对象迭代的内置符号)的方法。

  该方法包括:

  当对象循环访问的.循环中,调用Symbol.iterator方法,该方法必须返回迭代器(使用next()方法的对象)。获取迭代器后,对于.of会不断调用迭代器的next()方法来获取下一个元素。next()方法返回的内容必须符合格式:{done:Boolean,value:any}。当done:true时,循环结束,否则value是下一个值。实现迭代对象:

  让obj={

  出发地:1,

  to:5,} obj[symbol . iterator]=function(){

  //返回迭代器

  返回{

  当前:this.from

  最后:this.to,

  下一个(){

  if(this.currentthis.last){

  return {done:false,value:this.current }

  }否则{

  Return {done:true}//迭代结束

  }

  }

  }}for(let para of obj){

  Console.log(para)}代码执行效果:

  注意,虽然上面的对象可以迭代,但是迭代中使用的材料不是对象,而是Symbol.iterator返回的迭代器(也是对象)

  

把对象本身构造成迭代器

  以上代码构造了一个内置函数Symbol.iterator(),该函数返回一个iterator对象。我们还可以用另一种方式实现迭代器:让对象本身成为迭代器:

  让obj={

  出发地:1,

  到:5,

  [Symbol.iterator](){

  this.current=this.from

  还这个;//返回对象本身

  },

  Next(){//向对象添加下一个方法

  如果(this.currentthis.to){

  return {done:false,value:this.current }

  }否则{

  返回{done:true}

  }

  }}for(let para of obj){

  Console.log(para)}代码执行效果同上图所示。

  我们可以总结可迭代对象的概念:

  所谓iterable对象就是一个名为Symbol.iterator的普通对象,返回一个迭代器。

  或者,带有Symbol.iterator和next方法的对象也是迭代对象。

  

String也是可迭代的

  数组和字符串都可以迭代。我们可以很容易地使用.语句循环访问数组中的字符元素:

  let str=123for(let c of str){

  Console.log(c)}这也适用于代理对(UTF-16扩展字符):

  让str= . for(字符串的字母c){

  console.log(c)}的执行效果如下:

  

String的迭代器

  不仅适用于.of语句可以使用迭代器,但我们也可以显式调用迭代器:

  let str= 12345 let itr=str[symbol . iterator]()while(true){

  let result=itr.next()

  if(result.done)中断;

  Console.log(result.value)}代码执行效果:

  上面的代码执行遍历字符串字符的操作。是不是觉得可迭代对象没那么神秘了!

  

类数组对象和可迭代对象

  类数组和迭代在遍历函数上非常相似,都可以方便地拥有内部元素,但两者还是有明显的区别:

  迭代对象:实现Symbol.iterator的对象;类数组类数组对象:带有数值索引和长度属性;字符串是一个可以迭代的对象,即使它是一个类数组。

  迭代和类数组对象通常不是数组。如果我们想把一个迭代或类数组对象变成数组,我们需要使用Array.from方法。

  

Array.from

  使用Array.from将字符串转换为数组:

  str= 123 let arr=array . from(str)console . log(arr)代码执行效果如下:

  将自定义类数组对象转换为数组:

  让obj={

  0:0,

  1:1,

  2:2,

  length:3 } let arr=array . from(obj)console . log(arr)代码执行结果:

  Array.from的完整语法:

  在生成数组之前,将对每个iterable或class数组元素调用array.from (obj [,mapFunc,thisArg]) mapfunc方法。如果mapfunc是一个成员方法,可以使用thisarg来提供这个指针。

  例如:

  str= 12345 let arr=array . from(str,ITM=ITM) console.log (arr)代码执行结果:

  这里,通过映射函数,将本应生成的字符数组转换为数字数组。

  

总结

  可以使用的对象.的语法称为可迭代对象迭代对象。Symbol.iterator方法是在普通对象的基础上实现Symbol.iterator方法并返回迭代器的对象;迭代器包含next方法,返回下一个元素的值;下一个方法的返回值需要满足格式{done:Boolean,value:nextVal}。done:true时,Array.from可以在迭代结束时将类数组和iterable对象变成数组;

  【相关推荐:javascript视频教程,web前端】以上是JavaScript类数组和iterable对象实现原理的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • slice 数组,js中的slice()方法,JS数组方法slice()用法实例分析
  • js数组转字符串,字符串转数组方法,JS 数组转字符串
  • js数组转字符串,字符串转数组方法,JS 数组转字符串,JS数组转字符串实现方法解析
  • js数组筛选的方法,js 多条件筛选
  • js数组筛选的方法,js 多条件筛选,JS实现数组过滤从简单到多条件筛选
  • js数组的常用10种方法详解图,js数组的常用10种方法详解图片
  • js数组的常用10种方法详解图,js数组的常用10种方法详解图片,JS数组的常用10种方法详解
  • js数组去重的几种方式,js数组去重最简单的方法
  • js数组去重的几种方式,js数组去重最简单的方法,js数组去重的11种方法
  • js数组去重最简单的方法,数组去重方法js
  • js数组去重最简单的方法,数组去重方法js,七种JS实现数组去重的方式
  • js数组中去除重复值的几种方法是什么,js数组中去除重复值的几种方法有哪些
  • js数组中去除重复值的几种方法是什么,js数组中去除重复值的几种方法有哪些,js数组中去除重复值的几种方法
  • js初始化一个数组,js数组初始化的三种方式
  • js初始化一个数组,js数组初始化的三种方式,js二维数组定义和初始化的三种方法总结
  • 留言与评论(共有 条评论)
       
    验证码: