美文网首页日常刻书
ES6 中的内建迭代器

ES6 中的内建迭代器

作者: F_wind | 来源:发表于2021-01-28 15:09 被阅读0次

《深入理解ES6》阅读随笔

对象集合迭代器

  • entries:遍历返回键与值;
  • keys:遍历返回键(如果是数组返回索引);
  • values:遍历返回值;
    数组与 Set 集合默认返回的迭代器为 values 类型,Map 集合默认返回的迭代器为 entries,下面是几个通过 for-of 输出迭代器的列子:
const arrList = ["a", "b", "c"];
const setList = new Set(["s1", "s2", "s3"]);
const mapList = new Map([
  ["key1", "value1"],
  ["key2", "value2"],
  ["key3", "value3"],
]);
console.log("---- arr ----");
// default
for (let v of arrList) {
  console.log(v);
}
// keys
for (let v of arrList.keys()) {
  console.log(v);
}
// values
for (let v of arrList.values()) {
  console.log(v);
}
// entries
for (let v of arrList.entries()) {
  console.log(v);
}
console.log("---- set ----");
// default
for (let v of setList) {
  console.log(v);
}
// keys
for (let v of setList.keys()) {
  console.log(v);
}
// values
for (let v of setList.values()) {
  console.log(v);
}
// entries
for (let v of setList.entries()) {
  console.log(v);
}
console.log("---- map ----");
// default
for (let v of mapList) {
  console.log(v);
}
// keys
for (let v of mapList.keys()) {
  console.log(v);
}
// values
for (let v of mapList.values()) {
  console.log(v);
}
// entries
for (let v of mapList.entries()) {
  console.log(v);
}

上面代码整体的输出结果如下所示:

{ value: 1, done: false }
{ value: 2, done: false }
{ value: 3, done: false }
{ value: undefined, done: true }
---- arr ----
a
b
c
0
1
2
a
b
c
[ 0, 'a' ]
[ 1, 'b' ]
[ 2, 'c' ]
---- set ----
s1
s2
s3
s1
s2
s3
s1
s2
s3
[ 's1', 's1' ]
[ 's2', 's2' ]
[ 's3', 's3' ]
---- map ----
[ 'key1', 'value1' ]
[ 'key2', 'value2' ]
[ 'key3', 'value3' ]
key1
key2
key3
value1
value2
value3
[ 'key1', 'value1' ]
[ 'key2', 'value2' ]
[ 'key3', 'value3' ]

另外,Map 类型的迭代器还可以通过解构的方式获取键值:

// 接着使用上面例子中声明的 Map 集合,来解构获取键值
for (let [k,v] of mapList.entries()) {
  console.log(k,v);
}
// 最终输出
key1 value1
key2 value2
key3 value3

字符串迭代器

在 JavaScript 中,字符串是可以像数组一样迭代的,比如字符串 “Hi”可以通过 “Hi”[0] 的方式取出 “H” 字符;但是有一种情况需要注意,就是占用两个字符单元的特殊字符,不能直接通过位置索引来获取到,需要使用迭代器来获取一下,就像下面这个例子一样:

const str1 = "Hi";
for (let i = 0; i < str1.length; i++) {
  console.log(str1[i]);
}
const str2 = "Hi,🎮";
// 按索引取值会出现乱码,因为 moji 字符占用两个长度
for (let i = 0; i < str2.length; i++) {
  console.log(str2[i]);
}
// 此时可以通过迭代器输出的方式,即可正常获取字符元素
for (let v of str2) {
  console.log(v);
}
结果:
H
i
H
i
,
�
�
H
i
,
🎮

NodeList 迭代器

NodeList 是 Web 中用于存放节点的一个集合,它并不属于任何已声明的集合类型,比如数组、Set、Map,但是却也内置了迭代器,因此可以通过 for-of 的方式,像取数组一样,对其进行遍历操作。

相关文章

  • Generator(二)

    内建Iterator Iterator是ES6的重要组成部分,因此,对许多内建类型你不需要自己创建迭代器,ES6已...

  • ES6 中的内建迭代器

    《深入理解ES6》阅读随笔 对象集合迭代器 entries:遍历返回键与值; keys:遍历返回键(如果是数组返回...

  • es6基础知识3(迭代)

    title: es6基础知识3(迭代)tags: 迭代categories: 前端 1. 迭代器 es6中新增了迭...

  • 迭代器,生成器和yield

    迭代器, 生成器, yield 都是ES6 中的新语法 迭代器 迭代器由三个方法组成: hasNext() 是否还...

  • JavaScript设计模式-0001---迭代器模式

    使用闭包实现迭代器 test es6使用 生成器实完成迭代器模式 使用es6的生成器实现数据自增 迭代器/es6的...

  • Javascript 迭代器是什么

    Javascript 迭代器是什么 JavaScript迭代器是在ES6中引入的,用于循环一系列值,通常是某种集合...

  • Generator(一)

    要理解生成器,先理解迭代器。因为生成器就是返回一个迭代器的函数。 ES5实现的迭代器 ES6中的生成器用法: 生成...

  • 异步的那些事儿,es6

    为了解决回调问题,es6引入了原生的迭代器,所以本文主要探讨的是什么是迭代器,迭代器又怎么解决回调问题。 迭代器 ...

  • JavaScript 设计模式(五):迭代器模式

    文章内容分两部分: 前半部分为 “迭代器模式” 概念; 后半部分为 ES6 中 Iterator (迭代器) 上半...

  • ES的迭代器Iterator和生成器Generator

    一、简介 1.1 集合对象迭代器 迭代器是一种常用的设计模式,人们常用它来遍历集合对象。在ES6中,有Array、...

网友评论

    本文标题:ES6 中的内建迭代器

    本文链接:https://www.haomeiwen.com/subject/gszttltx.html