当我在数小黄鸭的时候,学长让我给他讲一讲JS中的迭代(二)

简介: 本文将由浅入深地从基础与原理再到实战与手撕展开,探究JS迭代的原理,解析官方文档的案例

迭代的实战

我们知道很多迭代的操作,比如最经典的for,还有forEachfor offor in等等,那么同样是迭代,我们该如何选择正确的迭代方式呢?下面来一一分析

forEach场景

forEach方法常见的可以遍历对象有SetMaparrayNodeList,它会迭代每个数据结构知道终止,因为无法在内部使用return或者是break所以无法终止迭代,所以说如果我们的迭代无需终止,就可以使用forEach

let arr = [
    {name:"猪痞恶霸",age:20},
    {name:"Ned",age:21}
]
arr.forEach((item) => {
    item.age+=1
})
复制代码

比如使用forEach来对数组元素进行批量处理

for of场景

上面提到了forEach的迭代是无法终止的,所以当我们想终止迭代,那么我们就可以使用for of,比如在当元素满足某个条件的时候终止迭代

let arr = [1,3,10,7,10]
for(item of arr) {
    console.log(item)
    if(item%2 === 0) {
        break
    }
} 
// 1,3,10
复制代码

如上,当元素是偶数的时候那么就停止迭代,相对于forEach来看for of有个缺陷就是无法获取当前元素对应的索引,而forEach可以,所以我们需要选择不同的迭代操作来适应当前的需求。

for in场景

由于Object没有内置迭代器,所以for of无法对其进行迭代,我们可以使用for in方法来迭代对象,其返回的是属性的键名

let obj = {
    name:"ned",
    like:"man"
}
for(item in obj) {
    console.log(item)
} // name like
复制代码

当然如果你想要针对对象进行一些特性地迭代,比如迭代Symbol属性,那么可以参考一下这篇文章:JS遍历对象的七种方法

Very Good!!!通过上面的三种迭代场景,我们学到了可以根据不同类型的迭代对象,参数需要,以及性能相关来判断使用哪种迭代操作,那么下面我给大家带来点花的:手撕迭代

手撕迭代

来源:JS高程4,下面我会根据这个手撕来给大家分析,帮助大家进一步透彻迭代

class Counter {
  constructor(limit) {
    this.limit = limit;
  }
  [Symbol.iterator]() {
    let count = 1,
      limit = this.limit;
    return {
      next() {
        if (count <= limit) {
          return { done: false, value: count++ };
        } else {
          return { done: true, value: undefined };
        }
      },
    };
  }
}
let counter = new Counter(3);
for (let i of counter) { console.log(i); } 
复制代码

这是一个实现迭代的类Counter,内部有构造函数与迭代器接口Symbol.iterator

  1. 创建实例的时候传入limit给予实例长度,其实这里可以理解为我们在初始化数组的时候给与数组长度
  2. 进行for of操作的时候对应内部Symbol.iterator方法并调用,返回一个迭代器对象,该对象包含一个next方法
// 内部机制
counter[Symbol.iterator]()
// {
//  {next: ƒ}
// }
复制代码
  1. 调用next方法,返回{ done: false, value: count++ }格式数据,每次调用为countlimit做判断,如果超过范围,那么将返回的对象的done属性标记为false说明迭代完毕

最后

经过学长的鞭策与学姐的鼓励,我又一次地领悟了迭代器地奥妙,整理并输出了该篇文章,如果对你有帮助就点小爱心吧!

相关文章
|
JavaScript 前端开发 开发者
从0开始学习JavaScript--JavaScript 循环与迭代详解
JavaScript中的循环和迭代是编写高效和灵活代码的关键。循环用于重复执行一段代码,而迭代则用于遍历数据结构。本文将深入研究JavaScript中常见的循环结构和迭代方法,并通过丰富的示例代码来帮助读者更好地理解和运用这些概念。
|
前端开发 JavaScript 开发者
【前端开发者的福音】彻底改变你编码习惯的神奇数组迭代技巧——从基础到进阶,解锁 JavaScript 数组迭代的N种姿势!
【8月更文挑战第23天】在Web前端开发中,数组是JavaScript中最常用的数据结构之一,掌握高效的数组迭代方法至关重要。本文详细介绍了多种数组迭代技巧:从基础的`for`循环到ES6的`for...of`循环,再到高阶方法如`forEach`、`map`、`filter`、`reduce`及`some`/`every`等。这些方法不仅能提高代码的可读性和维护性,还能有效优化程序性能。通过具体的示例代码,帮助开发者更好地理解和运用这些迭代技术。
158 0
|
JavaScript 前端开发 索引
JS中常用的数组迭代方法(filter,forEach,map,every,some,find,findIndex)
这段代码和说明介绍了JavaScript中数组的一些常用方法。函数接收三个参数:`item`(数组项的值)、`index`(项的位置,可选)和`array`(数组本身,可选)。示例展示了如何使用`filter()`过滤非空项、`forEach()`遍历数组、`map()`处理并返回新数组、`every()`检查所有元素是否满足条件、`some()`检查是否存在满足条件的元素、`find()`获取首个符合条件的元素值以及`findIndex()`获取其索引位置。这些方法都不会修改原数组。
398 0
JS中常用的数组迭代方法(filter,forEach,map,every,some,find,findIndex)
|
JavaScript 前端开发
JavaScript 中 五种迭代数组的方法 every some map filter forEach
本文介绍了JavaScript中五种常用数组迭代方法:every、some、filter、map和forEach,并通过示例代码展示了它们的基本用法和区别。
|
存储 缓存 JavaScript
解密迭代艺术:精通JavaScript中的for循环技巧
解密迭代艺术:精通JavaScript中的for循环技巧
215 0
|
JavaScript 前端开发
当我在数小黄鸭的时候,学长让我给他讲一讲JS中的迭代(一)
本文将由浅入深地从基础与原理再到实战与手撕展开,探究JS迭代的原理,解析官方文档的案例
228 1
|
JavaScript 前端开发 索引
JavaScript数组对象的迭代方法详解
JavaScript数组对象的迭代方法详解 上一篇博客讲到了数组的方法,当然里边比较复杂的就是数组的迭代方法,因为涉及到了回调函数,所以这篇博客我们来详细讲解一下js数组迭代方法的使用。 1.forEach(funcrion(value,index,arr){}):对数组的每一项运行给定函数,这个方法不进行返回,所以一般用于让数组循环执行某方法。 var arr=[1,2,3,4,5,6]; arr.forEach(function(val,index,arr){ console.log(val,index,arr); }) // 其中:
|
设计模式 存储 JavaScript
JavaScript设计模式-迭代者模式(18)
JavaScript设计模式-迭代者模式(18)
|
JavaScript 前端开发 索引
JavaScript中 数组迭代(遍历)的几种方法
JavaScript中 数组迭代(遍历)的几种方法
169 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
307 2