Iterable object of JavaScript

数组是可迭代的,所以数组可以用于for of,字符串也是可迭代的,所以字符串也可以用作for of,那么,对象呢?
试一试:
var somebody = {
start:0,
end:100
}
for (const iterator of somebody) {
console.log(iterator);
}
//somebody is not iterable
如你所见,not iterable!,但是我们可以把一个对象定制成可迭代的,接下来:
Symbol.iterator 是一个对象的内置方法,可以使我们定制对象的迭代过程,需要注意的是,该方法必须返回一个迭代器(带有next方法的对象)
代码如下:
const range = {
from: 1,
to: 5,
[Symbol.iterator]() {
this.current = this.from;
return this;//返回自己,
},
next() { // 必须有next方法,next方法必须返回一个具有done和value属性的对象,当done为true,value可以省略
if (this.current <= this.to) {
return { done: false, value: this.current++ };
}
return { done: true };
}
}
for (const iterator of range) {
console.log('iterator-',iterator);
}
/**
iterator- 1
iterator- 2
iterator- 3
iterator- 4
iterator- 5
*/
this.current属性是我为了控制迭代流程而自定义的;
Array.from可以将一个可迭代对象转换为数组,数组的值就是可迭代对象的迭代器运行返回的值
console.log(Array.from(range));
//[ 1, 2, 3, 4, 5 ]
Array.from 完整语法是这样的,Array.from(obj,mapFn,thisArg);
我们可以通过mapFn映射函数来处理数组的值,并且可以给该函数指定this;
const thisArg = {sign:'SNS-'}
let results = Array.from(range,function(num){
return `${this.sign}${num}`;
},thisArg)
console.log(results);
// [ 'SNS-1', 'SNS-2', 'SNS-3', 'SNS-4', 'SNS-5' ]
Iterable object of JavaScript的更多相关文章
- 向json中添加新的熟悉或对象 Add new attribute (element) to JSON object using JavaScript
How do I add new attribute (element) to JSON object using JavaScript? JSON stands for JavaScript Obj ...
- IOS Object和javaScript相互调用
在IOS开发中有时会用到Object和javaScript相互调用,详细过程例如以下: 1. Object中运行javascript代码,这个比較简单,苹果提供了非常好的方法 - (NSString ...
- python generator iterator和iterable object
1 iterable object list.dict.set.tuple.file(在每行上iterate)等都是iterable object,但是它们不是iterator.但是它们可以转换成it ...
- What is the most efficient way to deep clone an object in JavaScript?
What is the most efficient way to deep clone an object in JavaScript? Reliable cloning using a libra ...
- How to access the properties of an object in Javascript
Javascript has three different kinds of properties: named data property, named accessor property and ...
- What is an Activation object in JavaScript ?
********************* from Professional JavaScript for Web Development Execution Context And Scope T ...
- object in javascript
枚举对象属性 for....in 列举obj的可枚举属性,包括自身和原型链上的 object.keys() 只列举对象本身的可枚举属性 创建对象的几种方式 对象字面量 const pre='test' ...
- python-可变迭代对象在for循环中的风险Risk in FOR loop while looping mutable iterable object
>>> a = [1,2,3,4,5,6] >>> for item in a: ... a.remove(item) ... >>> a [2, ...
- 剑指offer第32题:把数组排成最小的数及关于list.sort()和sorted( Iterable object )函数的相关知识
* 解题思路: * 先将整型数组转换成字符数组,然后将String数组排序,最后将排好序的字符串数组拼接出来.关键就是制定比较规则. * 排序规则如下: * 若ab > ba 则 a & ...
随机推荐
- SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式
SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...
- KVM (虚拟化网络管理)
vlan:https://www.cnblogs.com/du-z/p/10802786.html trunk:https://www.cnblogs.com/du-z/p/10804773.html ...
- linux 用户、用户组及相关命令(useradd 、passwd、userdel 、groupadd 、groupdel、usermod 、gpasswd 、 id、su)
linux是一个多用户系统,用于权限管理(权限最小化); 相关命令: 7 8 9 10 11 12 13 14 15 useradd passwd userdel groupadd groupdel ...
- Pythonchallenge1过关攻略
第一关上来是一个电视,上面写着2^38,这就非常关键了,这时候我们已经有了大致思路,再看一眼电视机下面的话确认一下,"Hint: try to change the URL address. ...
- .Net Core 使用 CSRedisCore 访问 Redis 的哨兵和主从复制
一.创建Redis服务 运行环境是Window,安装Redis请看:安装教程. 直接开始创建Redis服务,演示就创建两个一主一从,先把安装路径下的 redis.windows.conf 文件复制一份 ...
- 秒啊,速来get这9个jupyter实用技巧
1 简介 jupyter notebook与jupyter lab作为广受欢迎的ide,尤其适合开展数据分析相关工作,而掌握它们相关的一些实用技巧,势必会大大提升日常工作效率.而今天我就来给大家介绍9 ...
- impala支持的数据库里的double(float)类型,通过迁移inceptor后,类型的值都变成了null
impala支持的数据库里的double(float)类型,通过迁移inceptor后,double类型的值都变成了null. 通过查阅日志发现默认将double转换成Decimal(38,10)然而 ...
- Java一些概念
1.Java先编译后解释 同一个.class文件在不同的虚拟机会得到不同的机器指令(Windows和Linux的机器指令不同),但是最终执行的结果却是相同的. 2.JDK包含JRE,JRE包含JVM, ...
- BZOJ4566 [Haoi2016]找相同字符【SAM】
BZOJ4566 [Haoi2016]找相同字符 给定两个字符串\(s和t\),要求找出两个字符串中所有可以相互匹配的子串对的数量 首先考虑可以怎么做,我们可以枚举\(t\)串的前缀\(t'\),然后 ...
- Codeforces Round #603 C. Everyone is a Winner!
题意:给你一个整数n,求所有n/k的值(k∈{1,2,3...,n,.......}). 题解:最简单的方法是用枚举1~sqrt(n),把除数和商放进set中,就能直接水过,但后来看其他人的题解了解到 ...