jquery 迭代相关知识
-
Jquery对象本质和隐式迭代 Jquery对象本质可以看成是一个包含一个 dom数组和所有Jquery方法的容器。要使用Jquery,就必须将dom元素转成 Jquery对象,然后才能调用JQ对象的便捷方法。//所有 div 内部设置一个 span 标签var $divs = $("div");$divs.html("<span>广州小蛮腰</span>");每当我们调用选择器方法查找dom树里的元素时,其实就是把找到的dom元素存入一个JQ对象里的dom数组中,然后再把这个JQ对象返回。当我们调用Jquery方法时(如 html()),jq方法会遍历内部 dom数组,并调用每个dom元素的对应的dom属性或方法(如innerHTML),完成操作。其中Jq方法遍历内部dom数组的过程就叫做【隐式迭代】。【图例】补充:每个Jq对象的方法都是从 Jquery函数的 prototype 中共享。
-
Python迭代和迭代器详解我们将要来学习python的重要概念迭代和迭代器,通过简单实用的例子如列表迭代器和xrange。可迭代一个对象,物理或者虚拟存储的序列。list,tuple,strins,dicttionary,set以及生成器对象都是可迭代的,整型数是不可迭代的。如果你不确定哪个可迭代哪个不可以,你需要用python内建的iter()来帮忙。>>> iter([1,2,3]) <listiterator object at 0x026C8970>>>> iter({1:2, 2:4}) <dictionary-keyiterator object at 0x026CC1B0>>>> iter(1234) Traceback (most recent call last): File&
-
Python进阶:迭代器与迭代器切片在前两篇关于 Python 切片的文章中,我们学习了切片的基础用法、高级用法、使用误区,以及自定义对象如何实现切片用法(相关链接见文末)。本文是切片系列的第三篇,主要内容是迭代器切片。 迭代器是 Python 中独特的一种高级特性,而切片也是一种高级特性,两者相结合,会产生什么样的结果呢? 1、迭代与迭代器 首先,有几个基本概念要澄清:迭代、可迭代对象、迭代器。 迭代 是一种遍历容器类型对象(例如字符串、列表、字典等等)的方式,例如,我们说迭代一个字符串“abc”,指的就
-
python迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。1. 可迭代对象我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。但是,是否所有的数据类型都可以放到for...in...的语句中,然后让for...in...每次从中取出一条数据供我们使用,即供我们迭代吗?In [1]: for i in 100: ...: print(i) ...: --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-inp
jquery 迭代相关课程
jquery 迭代相关教程
- 1. 从外部迭代到内部迭代 对于一个集合迭代是我们常用的一种操作,通过迭代我们可以处理返回每一个操作。常用的就是 for 循环了。我们来看个例子:1273输出: 2这里我们统计数组 numbers 中大于 5 的元素的个数,我们通过 for 循环对 numbers 数组进行迭代,随后对每一个元素进行比较。这个调用过程如下:在这个过程中,编译器首先会调用 List 的 iterator() 方法产生一个 Iterator 对象来控制迭代过程,这个过程我们称之为 外部迭代。 在这个过程中会显示调用 Iterator 对象的 hasNext() 和 next() 方法来完成迭代。这样的外部迭代有什么问题呢?Tips: 对于循环中不同操作难以抽象。比如我们前面的例子,假设我们要对大于 5 小于 5 和等于 5 的元素分别进行统计,那么我们所有的逻辑都要写在里面,并且只有通过阅读里面的逻辑代码才能理解其意图,这样的代码可阅读性是不是和 Lambda 表达式的可阅读性有着天壤之别呢?Java 8 中提供了另一种通过 Stream 流来实现 内部迭代 的方法。我们先来看具体的例子:1274输出: 2在这个例子中,我们调用 stream() 方法获取到 Stream 对象,然后调用该对象的 filter() 方法对元素进行过滤,最后通过 count() 方法来计算过滤后的 Stream 对象中包含多少个元素对象。与外部迭代不同,内部迭代并不是返回控制对象 Iterator, 而是返回内部迭代中的相应接口 Stream。进而把对集合的复杂逻辑操作变成了明确的构建操作。在这个例子中,通过内部迭代,我们把整个过程被拆分成两步:找到大于 5 的元素;统计这些元素的个数。这样一来我们代码的可读性是不是大大提升了呢?
- 3. 迭代器 这里说的迭代器是遵循上面两个协议来实现的,在满足两个协议时,我们可以显式地通过不断调用 next () 方法去进行迭代。在迭代一个迭代器后,我们称之为消耗了这个迭代器而,且每个迭代器只能执行一次。下面我们来看看怎么实现一个迭代器:var obj = {}obj[Symbol.iterator] = function() { let index = 1; return { next() { if (index <= 10) { return {value: index++, done: false} } else { return {done: true} } } }}上面的代码中根据可迭代协议给 obj 对象添加一个 Symbol.iterator 方法,再根据迭代器协议返回一个 next() 方法,在每次消耗 next() 时对 index 进行加 1 操作。当 index 大于 10 的时候结束迭代行为,之后再消耗 next() 返回值不变。根据上面的代码,我们可以显式的手动调用 next():var iterator = obj[Symbol.iterator]();var s = iterator.next();while(!s.done) { console.log(s.value); s = iterator.next();}// 1// 2// ...执行上面的代码,在浏览器的控制台中,可以看到大于的结果是 1 到 10。上面是我们手动执行消耗 next() 的方式,上面我们也说了,只要满足迭代协议就可以被 for...of 循环,那是不是真的是这样的呢?下面我们就使用 for...of 对 obj 进行循环。for (let i of obj) { console.log(i)}// 1// 2// ...在控制台中执行上面的代码,可以看到和我们使用手动调用 next() 方式返回打印的结果是一样的。
- 3. 迭代协议 使用迭代器遍历访问可迭代对象,要求迭代器和可迭代对象遵循迭代协议,迭代协议如下:可迭代对象 iterable 提供成员方法 __iter__,该方法返回用于遍历的迭代器 iteratorclass Iterable: def __iter__(self):迭代器 iterator 提供成员方法 __next__,该方法返回下一个被遍历的元素class Iterator: def __next__(self):异常 StopIteration,当遍历完全部的元素后,成员方法 __next__ 抛出一个特殊的异常 Stop Iteration 表示遍历结束内置函数 iter,用于获取可迭代对象对应的迭代器def iter(iterable): iterator = iterable.__iter__() return iterator在第 1 行,iter 的输入参数是可迭代对象 iterable在第 2 行,调用成员方法 __iter__在第 3 行,返回迭代器 iterator内置函数 next,用于获取下一个被遍历的元素def next(iterator): item = iterator.__next__() return item在第 1 行,next 的输入参数是迭代器 iterator在第 2 行,调用成员方法 __next__在第 3 行,返回被遍历的元素根据以上的迭代协议,即可将 for … in 循环翻译为如下等价代码:iterator = iter(iterable)while True: try: item = next(iterator) print(item) except StopIteration: break
- 3.1 可迭代对象与迭代器 本节实现类 IterateWord 用于简化遍历文本中的单词,**类 IterateWord 既是可迭代对象也是迭代器: **类 IterateWord 是可迭代对象,提供了 __iter__ 方法,返回一个迭代器类 IterateWord 是迭代器,提供了 __next__ 方法,返回下一个遍历的对象类 IterateWord 的定义如下:class IterateWord: def __init__(self, file): self.file = file self.words = []在第 2 行,参数 file 指明了被遍历的文本文件在第 3 行,将参数 file 保存到成员变量中在第 4 行,IterateWord 将每一行文本分割为多个单词,保存在 self.words 中,该变量初始化为空列表
- 3. 可迭代性 上面的例子,用模拟的迭代器地迭代了一个数组对象,那是不是所有的对象都可以这样迭代呢?当然不是。只有一个对象实现了 Symbol.iterator 属性时,我们才认为它是可迭代的。一些内置的类型如 Array,Map,Set,String,Int32Array,Uint32Array 等都已经实现了各自的 Symbol.iterator。Symbol.iterator 属性本身是一个函数,就是当前数据结构默认的迭代器生成函数。执行这个函数,就会返回一个迭代器。比如,String 是一个内置的可迭代对象:let str: string = 'Hi'console.log(typeof str[Symbol.iterator]) // functionString 的默认迭代器会依次返回该字符串的字符:361代码解释:第 1 行,声明一个字符串类型变量,字符串类型内置了默认迭代器生成函数 Symbol.iterator。第 2 行,执行这个函数,返回了一个迭代器。总结一下迭代器的作用:为各种数据结构(Array,Map,Set,String等),提供一个统一的、简便的访问接口。使得数据结构的成员能够按某种次序排列。创造了一种新的遍历命令 for..of 循环。
- TypeScript 迭代器(Iterator) 如果要从一个数据集中获取一个数据项,可以对这个数据集进行迭代。JavaScript 提供了许多迭代集合的方法,从简单的 for 循环到 map() 和 filter()。本节要介绍的迭代器也是一种方案,并且迭代器将迭代的概念直接带入核心语言,同时提供了一种机制来自定义 for...of 循环的行为。
jquery 迭代相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量