【Avalon源码】iterator

function iterator(vars, body, ret) {
    var fun = ‘for(var ‘ + vars + ‘i=0,n = this.length; i < n; i++){‘ +
            body.replace(‘_‘, ‘((i in this) && fn.call(scope,this[i],i,this))‘) +
            ‘}‘ + ret
    console.log(fun)
    return Function(‘fn,scope‘, fun)
}

Array.prototype.forEach = iterator(‘‘, ‘_‘, ‘‘)
Array.prototype.filter = iterator(‘r=[],j=0,‘, ‘if(_)r[j++]=this[i]‘, ‘return r‘)
Array.prototype.map = iterator(‘r=[],‘, ‘r[i]=_‘, ‘return r‘)
Array.prototype.some = iterator(‘‘, ‘if(_)return true‘, ‘return false‘)
Array.prototype.every = iterator(‘‘, ‘if(!_)return false‘, ‘return true‘)

var arr = [1,2,3]
arr.forEach(function(value) {
    console.log(value)
})
时间: 2024-10-10 02:03:35

【Avalon源码】iterator的相关文章

【avalon源码】scpCompile

function noop() {} function scpCompile(array) { return Function.apply(noop, array) } // var fn = new Function('x', 'y', 'return x + y;'); // 等价于var fn = function(x, y) {return x + y;} var fn = scpCompile(['x', 'y', 'return x + y;']) console.log(fn)

Java源码分析:深入探讨Iterator模式

作者:兄弟连 java.util包中包含了一系列重要的集合类.本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕. 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理. 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛型代码,为了简化问题,所以我们还是讨论1.4版本的代码. 集合类的根接口Collection

LevelDB源码分析--Iterator

我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文. 下面我们再来看一个例子,我们为一个书店写程序,书店里有许多书Book,每个书架(BookShelf)上有多本书. 类结构如下所示 class Book { private: string book_name_; }; class Shelf { private: vector<Book> books_; }; 如何遍历书架上所有的书呢?一种实

源码(07) -- java.util.Iterator&lt;E&gt;

java.util.Iterator<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.Iterator<E>是一个接口,它的定义如下: 1 public interface Iterator<E> { 2 3 boolean hasNext(); 4 5 E next(); 6 7 void remove

SGI 2.9.1源码手札 stream Iterator:istream_iterator 和ostream_iterator 知识核心点

短期代码阅读主要基于SGI的STL,测试环境则是GCC_4.8.3_STL和VS_STL.暂时不去配置BOOST等库STL细节.待续 1.istream_iterator 输入流迭代器 1)没有operator=操作,因为只读,不可写,所以编译不支持.迭代器句柄保存当前已读取到的数据. _GLIBCXX_CONSTEXPR istream_iterator()       : _M_stream(0), _M_value(), _M_ok(false) {}       ///  Constru

STL 之 list源码自行实现(iterator)

(0)文件夹 STL 之 vector源码实现(云算法<< [] = 重载, new delete,throw catch) STLc++中string类的源码 堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数) 第一次实现list模板(幼稚的我) 浅析STL 谓词 + 仿函数 + 函数指针(c) 队列(queue) 之 c++模板实现(友元函数和运算符重载) STL 之 初识set multiset(map multimap) C++map类型 之 简单介绍

源码剖析Iterator接口遍历和直接for-get组合遍历的区别

经常使用ArrayList遍历,尝试总结一下for配合get()的遍历和Iterator配合next()遍历的区别,进入Java的JDK源码中进行深度剖析一下 这里参考一下http://bbs.csdn.net/topics/250025827论坛的测试程序: import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.LinkedList; /** * Iterat

avalon 中require.config源码分析

/********************************************************************* * 配置系统 在系统运行的开始就需要读取系统中require.config()这个方法中所配置的项目 * **********************************************************************/ //这里写在前面是为了更加方便阅读代码,在实际运行中,这几段代码必须放在下面 kernel.debug =

实例解析Collections源码,Iterator和ListIterator

比如一个视频或文章有多个页面标签设置,我们在看一篇文章或一个视频时,底部有为你推荐栏目. 如何根据这个文章或视频的标签,来实现这个推荐栏目呢. 1 public List<VideoInfoVo> getVideoInfoSix(Integer videoId, Integer sortId) { 2 // 1.获取推荐的六个视频(同一类型的) 3 List<VideoInfoVo> sixList = videoInfoMapper.getVideoInfoSix(videoId