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

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

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

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

  我们有个简单的方法来实现这个: s.print() 将会打印出stream里的所有元素。

  用它们还能做什么?

  另一个简便的功能是 Stream.range( min, max ) 函数。它会返回一个包含有从 min 到 max 的自然数的stream。

  1. var s = Stream.range( 10, 20 );   
  2. s.print(); // prints the numbers from 10 to 20   

  在这个stream上,你可以使用 map, filter, 和 walk 等功能。 s.map( f ) 接受一个参数 f,它是一个函数, stream里的所有元素都将会被f处理一遍;它的返回值是经过这个函数处理过的stream。所以,举个例子,你可以用它来完成让你的 stream 里的数字翻倍的功能:

  1. function doubleNumber( x ) {   
  2.     return 2 * x;   
  3. }   
  4.    
  5. var numbers = Stream.range( 10, 15 );   
  6. numbers.print(); // prints 10, 11, 12, 13, 14, 15   
  7. var doubles = numbers.map( doubleNumber );   
  8. doubles.print(); // prints 20, 22, 24, 26, 28, 30 

  很酷,不是吗?相似的, s.filter( f ) 也接受一个参数f,是一个函数,stream里的所有元素都将经过这个函数处理;它的返回值也是个stream,但只包含能让f函数返回true的元素。所以,你可以用它来过滤到你的stream里某些特定的元素。让我们来用这个方法在之前的stream基础上构建一个只包含奇数的新stream:

  1. function checkIfOdd( x ) {   
  2.     if ( x % 2 == 0 ) {   
  3.         // even number   
  4.         return false;   
  5.     }   
  6.     else {   
  7.         // odd number   
  8.         return true;   
  9.     }   
  10. }   
  11. var numbers = Stream.range( 10, 15 );   
  12. numbers.print();  // prints 10, 11, 12, 13, 14, 15   
  13. var onlyOdds = numbers.filter( checkIfOdd );   
  14. onlyOdds.print(); // prints 11, 13, 15 

  很有效,不是吗?最后的一个s.walk( f )方法,也是接受一个参数f,是一个函数,stream里的所有元素都要经过这个函数处理,但它并不会对这个stream做任何的影响。我们打印stream里所有元素的想法有了新的实现方法:

  1. function printItem( x ) {   
  2.     console.log( 'The element is: ' + x );   
  3. }   
  4. var numbers = Stream.range( 10, 12 );   
  5. // prints:   
  6. // The element is: 10   
  7. // The element is: 11   
  8. // The element is: 12   
  9. numbers.walk( printItem ); 

About D8

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