当前位置: 首页 > news >正文

JS函数式编程 数组部分风格 ES6版

遍历数组:

for(let item of array) {
    
}

// FP
// return array
array.map((item, index) => {})

查找数组中的一项:

for(let item of array) {
    if(item === _item) {
        
    }
}

// FP
// return item 匹配条件的第一项
array.find(item => item === _item)

数组过滤:

for(let item of array) {
    if(item > someValue) {
        
    }
}

// FP
// return array
array.filter(item => item > someValue)

reduce

reduce() 方法接收一个函数作为累加器,数组中的每个值从左到右开始执行方法,最终返回一个值。

array.reduce((preValue, currentValue, index, array) => {}, initialValue);

// fn(fn(fn(initialValue, array[0]), array[1]), array[2])
// 假如array = [1, 2, 3]
// 执行
array.reduce((preValue, currentValue) => preValue + currentValue, 0);
// 执行过程为
// step 1. return 0 + 1
// step 2. return 1 + 2
// step 3. return 3 + 3

求和:

let array = [1, 2, 3, 4, 5];
let sum = 0;
for(let item of array) {
    sum += item;
}

// FP
let sum = array.reduce((pre, cur) => pre + cur, 0);

复杂应用:

// 将'/aaa/bbb/ccc' 解析为 ['/aaa', '/aaa/bbb', '/aaa/bbb/ccc']
const fn = path =>
    path.split('/')
        .map(item => '/' + item)
        .reduce((pre, cur, index) => pre.concat(index < 1 ? '' : pre[index - 1] + cur), [])
        .filter((item, index) => index > 0);

更多文章 yjy5264.github.io


相关文章:

  • linux入门常用操作
  • VTP
  • powershell 性能测试小脚本
  • hihoCoder1603
  • jsp:choose 、when 和 和 otherwise 一组标签
  • “浏览器模式”和“文档模式”之间的区别
  • ​VRRP 虚拟路由冗余协议(华为)
  • h5 meta 移动
  • JQ-weui中的日期选择控件关于时间段的设置!
  • Can't get Kerberos realm
  • 三张图彻底了解Java中字符串的不变性
  • 没有方法异常NoSuchMethodException
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Elasticsearch 5.5.1-head插件安装
  • 学习OpenGL ES之教你实现SkyBox
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【翻译】babel对TC39装饰器草案的实现
  • CentOS6 编译安装 redis-3.2.3
  • java第三方包学习之lombok
  • js 实现textarea输入字数提示
  • JS学习笔记——闭包
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • nodejs实现webservice问题总结
  • sublime配置文件
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • XForms - 更强大的Form
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 大主子表关联的性能优化方法
  • 对JS继承的一点思考
  • 搞机器学习要哪些技能
  • 前端之React实战:创建跨平台的项目架构
  • 设计模式(12)迭代器模式(讲解+应用)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 微信小程序实战练习(仿五洲到家微信版)
  • 物联网链路协议
  • 写代码的正确姿势
  • 鱼骨图 - 如何绘制?
  • 怎么把视频里的音乐提取出来
  • 7行Python代码的人脸识别
  • postgresql行列转换函数
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​flutter 代码混淆
  • ​TypeScript都不会用,也敢说会前端?
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #微信小程序:微信小程序常见的配置传旨
  • $.ajax中的eval及dataType
  • (简单) HDU 2612 Find a way,BFS。
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)JAVA中的堆栈
  • ***利用Ms05002溢出找“肉鸡
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net 访问电子邮箱-LumiSoft.Net,好用