首页 > 编程语言 >前端必知必会-JavaScript 迭代器

前端必知必会-JavaScript 迭代器

时间:2024-11-19 21:45:14浏览次数:3  
标签:const iterator 迭代 必知 JavaScript next 对象 done

文章目录


JavaScript 可迭代对象

可迭代对象是可迭代对象(如数组)。

可以使用简单高效的代码访问可迭代对象。

可以使用 for…of 循环对可迭代对象进行迭代

For Of 循环

JavaScript for…of 语句循环遍历可迭代对象的元素。

语法

for (variable of iterable) {
  // code block to be executed
}

迭代

迭代很容易理解。

它只是意味着循环遍历一系列元素。

以下是一些简单的例子:
对字符串进行迭代
对数组进行迭代

对字符串进行迭代

您可以使用 for…of 循环对字符串的元素进行迭代:

示例

const name = "john";

for (const x of name) {
// 要执行的代码块
}

遍历数组

您可以使用 for…of 循环遍历数组的元素:

示例 1

const letters = ["a","b","c"];

for (const x of letters) {
// 要执行的代码块
}

示例 2

const numbers = [2,4,6,8];

for (const x of numbers) {
// 要执行的代码块
}

遍历集合

您可以使用 for…of 循环遍历集合的元素:

示例

const letters = new Set(["a","b","c"]);

for (const x of letters) {
// 要执行的代码块
}

注意
集合和映射将在下一章中介绍。

在 Map 上进行迭代

您可以使用 for…of 循环在 Map 的元素上进行迭代:

示例

const fruit = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);

for (const x of fruit) {
// 要执行的代码块
}

JavaScript 迭代器

迭代器协议定义如何从对象生成一系列值。

当对象实现 next() 方法时,它将成为迭代器。

next() 方法必须返回具有两个属性的对象:

value(下一个值)
done(true 或 false)

value迭代器返回的值(如果 done 为 true,可以省略)
done如果迭代器已完成,则为 true 如果迭代器已生成新值,则为 false

注意
从技术上讲,可迭代对象必须实现 Symbol.iterator 方法。

String、Array、TypedArray、Map 和 Set 都是可迭代对象,因为它们的原型对象具有 Symbol.iterator 方法。

自制可迭代对象

此可迭代对象每次调用 next() 时都会返回永无止境的结果:10、20、30、40、…

示例

// 自制可迭代对象
function myNumbers() {
let n = 0;
return {
next: function() {
n += 10;
return {value:n, done:false};
}
};
}

// 创建可迭代对象
const n = myNumbers();
n.next(); // 返回 10
n.next(); // 返回 20
n.next(); // 返回 30

自制可迭代对象的问题:

它不支持 JavaScript for…of 语句。

JavaScript 可迭代对象是具有 Symbol.iterator 的对象。

Symbol.iterator 是一个返回 next() 函数的函数。

可以使用以下代码对可迭代对象进行迭代:for (const x of iterable) { }

示例

// 创建对象
myNumbers = {};

// 使其可迭代
myNumbers[Symbol.iterator] = function() {
let n = 0;
done = false;
return {
next() {
n += 10;
if (n == 100) {done = true}
return {value:n, done:done};
}
};
}

现在您可以使用 for…of

for (const num of myNumbers) {
// 此处的任何代码
}

Symbol.iterator 方法由 for…of 自动调用。

但我们也可以“手动”执行:

示例

let iterator = myNumbers[Symbol.iterator]();

while (true) {
const result = iterator.next();
if (result.done) break;
// 此处任意代码
}

总结

本文介绍了JavaScript 迭代器的使用,如有问题欢迎私信和评论

标签:const,iterator,迭代,必知,JavaScript,next,对象,done
From: https://blog.csdn.net/qq_24018193/article/details/143813785

相关文章

  • 你可能不知道的JavaScript-1
    目录1.防御式CSS2.js的应用领域JavaScript中让人迷惑的知识点3.一个网页URL从输入到浏览器中到显示经历过怎么样的解析过程呢4.浏览器内核1.是什么2.浏览器的渲染过程HTML解析CSS解析构建RenderTree3.回流与重绘1.回流(重排)2.重绘3.页面性能优化1.减少DOM操......
  • Python-迭代器-生成器-装饰器
    迭代器、生成器和装饰器。迭代器用于遍历集合元素,如列表、字典和字符串。Iterator迭代器可迭代对象iterable惰性计算的序列反向迭代 迭代器有两个基本方法(实现了迭代器协议):__iter__()和__next__() iter()是Python中的一个内置函数,用于从可迭代对象(如列......
  • JavaScript函数式编程指南
    前言本文内容来自于《JavaScript函数式编程指南》,可以看作是对原书内容进行提炼和总结,若您有需要或感觉有出入请参原书。一、走进函数式面向对象编程(OOP)通过封装变化使得代码更易理解。函数式编程(FP)通过最小化变化使得代码更易理解。——MichaelFeathers(Twitter)函......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript南宁绿城
    HTML+CSS+JS【旅游网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 11.18实验18:迭代器模式
    [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。实验要求:1. 搜集并掌握JAVA和C++中常见的数据结构......
  • 【vue】项目迭代部署后 自动清除浏览器缓存
    前言:vue项目打包部署上线后,因浏览器缓存问题,导致用户访问的依旧是上个迭代批次的旧资源,需要用户手动清除缓存才能更新至最新版本,影响用户体验。解决方法:html根文件添加以下标签<metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"con......
  • HTML 入门必知:详细解读基础知识,开启网页开发之旅
    HTML入门必知:详细解读基础知识,开启网页开发之旅什么是HTML一、HTML的环境怎么设置二、HTML基本知识1.HTML结构讲解2.HTML基础知识(1).排版标签【1】.h1~h6【2】.p标签【3】.div标签(2).语义化标签(3).块级元素与行内元素【1】块级元素【2】行内元素(4).常用的文本标签(5).不......
  • JavaScript 字符串的常用方法有哪些
    速览JavaScript字符串的常用方法包括charAt、charCodeAt、concat、indexOf、lastIndexOf、slice、substring、toLowerCase、toUpperCase、trim、replace、split、padStart、padEnd等。详答1.基本信息JavaScript中的字符串是一种原始数据类型,提供了丰富的操作方法来处......
  • [JavaScript]将数组按照parentId和id整理成树状结构
     JavaScriptfunctionarrayToTree(items){constrootItems=[];constlookup={};for(constitemofitems){constitemId=item.id;lookup[itemId]=item;constparentId=item.parentId;if(parentId===n......
  • javascript-表达式与操作符
    1.数组初始化二维数组letmatrix=[[1,2,3],[4,5,6],[7,8,9]];未定义元素undefinedletsparseArray=[1,,,,5];包含三个未定义元素2.对象初始化letp={x:2.3,y:-1.2};点对象包含x,y坐标letq={};空对象q.x=2.3;q.y=-1.2;赋值3.函数letsquare=function(x){returnx*x;};......