前端函数式演进
上QQ阅读APP看书,第一时间看更新

2.1.4 Array数组集合和函数组合子

在JavaScript里,数组是一种特殊的对象,是JavaScript语言中集合的通用表示形式(对象和Map/Set依然可以使用数组表示)。换句话说,数组可以看作是一个对象,它的value是一个集合,且通过原型继承了一些原生方法。

使用数组的某些原生方法如map/filter/slice/concat可以实现类似jQuery、Lodash等库的语句组合形式,如链式调用、函数作为参数调用(如常见的前端问题:map(parseInt)),也可以用来代替一些控制语句,如for/while。

在数组集合的操作中,我们可以通过上面提到的map/filter/reduce等组合子方法来完成集合数据的映射、筛选、化约/折叠。数组使用这类关注结果的方法,取代命令式里常见的详细描述操作过程的保存游标、循环调用等方法。

JavaScript数组通过包装组合子这一改变编码方式的做法,践行了函数式思想的一些考量。更多类似的组合子方法出现在jQuery、Lodash等工具中,在ECMAScript新标准中也借鉴了如some/find/flatMap等方法。代码清单2-3演示了JSX中常见的组合子。

代码清单2-3 JSX中常见的组合子


const sidebar = (
  <ul>
    {
       props.posts
            .filter(post => post.title)
            .map(post => (
               <li key={post.id}>
                 {post.title}
               </li>
            ))
     }
  </ul>
);