• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 网页制作 > JavaScript >

stream.js :一个新的JavaScript数据结构(3)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-07点击:

  还有一个很有用的函数: s.take( n ),它返回的stream只包含原始stream里第前n个元素。当用来截取stream时,这很有用:

  1. var numbers = Stream.range( 10, 100 ); // numbers 10...100   
  2. var fewerNumbers = numbers.take( 10 ); // numbers 10...19   
  3. fewerNumbers.print(); 

  另外一些有用的东西:s.scale( factor ) 会用factor(因子)乘以stream里的所有元素; s.add( t ) 会让 stream s 每个元素和stream t里对应的元素相加,返回的是相加后的结果。让我们来看几个例子:

  1. var numbers = Stream.range( 1, 3 );   
  2. var multiplesOfTen = numbers.scale( 10 );   
  3. multiplesOfTen.print(); // prints 10, 20, 30   
  4. numbers.add( multiplesOfTen ).print(); // prints 11, 22, 33 

  尽管我们目前看到的都是对数字进行操作,但stream里可以装载任何的东西:字符串,布尔值,函数,对象;甚至其它的数组或stream。然而,请注意一定,stream里不能装载一些特殊的值:null和 undefined。

  想我展示你的魔力!

  现在,让我们来处理无穷多。你不需要往stream添加无穷多的元素。例如,在 Stream.range( low, high )这个方法中,你可以忽略掉它的第二个参数,写成 Stream.range( low ), 这种情况下,数据没有了上限,于是这个stream里就装载了所有从 low 到无穷大的自然数。你也可以把 low参数也忽略掉,这个参数的缺省值是 1。这种情况中, Stream.range()返回的是所有的自然数。

  这需要用上你无穷多的内存/时间/处理能力吗?

  不,不会。这是最精彩的部分。你可以运行这些代码,它们跑的非常快,就像一个普通的数组。下面是一个打印从 1 到 10 的例子:

  1. var naturalNumbers = Stream.range(); // returns the stream containing all natural numbers from 1 and up   
  2. var oneToTen = naturalNumbers.take( 10 ); // returns the stream containing the numbers 1...10   
  3. oneToTen.print(); 

  你在骗人

  是的,我在骗人。关键是你可以把这些结构想成无穷大,这就引入了一种新的编程范式,一种致力于简洁的代码,让你的代码比通常 的命令式编程更容易理解、更贴近自然数学的编程范式。这个Javascript类库本身就很短小;它是按照这种编程范式设计出来的。让我们来多用一用它; 我们构造两个stream,分别装载所有的奇数和所有的偶数。

  1. var naturalNumbers = Stream.range(); // naturalNumbers is now 1, 2, 3, ...   
  2. var evenNumbers = naturalNumbers.map( function ( x ) {   
  3.     return 2 * x;   
  4. } ); // evenNumbers is now 2, 4, 6, ...   
  5. var oddNumbers = naturalNumbers.filter( function ( x ) {   
  6.     return x % 2 != 0;   
  7. } ); // oddNumbers is now 1, 3, 5, ...   
  8. evenNumbers.take( 3 ).print(); // prints 2, 4, 6   
  9. oddNumbers.take( 3 ).print(); // prints 1, 3, 5 

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ